5 ms·
Hold my beer! https://i.redd.it/8waggyjyyle51.png https://i.redd.it/8waggyjyyle51.png
by yantrams 4y ago
Hold my beer!
https://i.redd.it/8waggyjyyle51.png https://i.redd.it/8waggyjyyle51.png
- ChadNauseam 4y agoHold mine :D https://github.com/anchpop/genomics_viz/blob/master/genomics-viz/Assets/StreamingAssets/Chromosomal/Scripts/chromsdata_tools/chromsdata_tools/compilation.py#L292-L433 https://github.com/anchpop/genomics_viz/blob/master/genomics... That's one expression because it used to be part of a giant comprehension, but I moved it into a function for a bit more readability. I'm considering moving it back just for kicks though. My philosophy is: if you're only barely smart enough to code it, you aren't smart enough to debug it. Therefore, you should code at your limit, to force yourself to get smarter while debugging
- teddyh 4y agohttps://www.reddit.com/r/ProgrammerHumor/comments/uosex4/no_please_no/ https://www.reddit.com/r/ProgrammerHumor/comments/uosex4/no_...
- agumonkey 4y agoThat code is fine in my book, there's more static code than for-comp and it's at work 3 level deep with no hard coupling between levels. Also well spaced and worded.
- int_19h 4y agoYours is nice and readable. Parents' one is not, but it feels like the indentation is deliberately confusing. I'd lay it out like so: tags = list(set([ nel for subli in [ mel for subl in [ [[jel.split('/')[2:] for jel in el] for el in classified ] for mel in subl ] for nel in subli if nel ])) Still not very readable, tho. But that's largely due to Python's outputs-first sequence comprehension syntax being a mess that doesn't scale at all. Side note: one other thing I always hated about those things in Python is that there's no way to bind an intermediary computation to a variable. In C# LINQ, you can do things like: from x in xs let y = x.ComputeSomething() where y.IsFoo && y.IsBar select y In Python, you have to either invoke ComputeSomething twice, or hack "for" to work like "let" by wrapping the bound value in a container: y for x in xs for y in [x.ComputeSomething()] if y.IsFoo and y.IsBar It's not just about not repeating yourself or not running the same code twice, either - named variables are themselves a form of self-documenting code, and a sequence pipeline using them even where they aren't strictly needed can be much more readable.
- texaslonghorn5 4y agoDoes the new walrus := in python solve your problem?
- roelschroeven 4y agoThe official name is assignment expression, which can be good to know to find documentation. Here's the PEP: https://peps.python.org/pep-0572/ https://peps.python.org/pep-0572/
- otherme123 4y agoCuriously, searching the docs for "walrus" (https://docs.python.org/3/search.html?q=walrus https://docs.python.org/3/search.html?q=walrus) yields exactly the results you need, but searching for "assignment expression" yields the previous results mixed a lot of other results due to the word "expression".
- int_19h 4y agoNot really; where would you put it inside the []?
- dragonwriter 4y agoIn the example from the end of the earlier post: y for x in xs if (y:=x.ComputeSomething()).IsFoo and y.IsBar
- int_19h 4y agoI suppose that works, although readability is not great, to put it mildly.
- texaslonghorn5 4y agoMuch better would be [(y:=x.ComputeSomething()) for x in xs if y.IsFoo and y.IsBar]
- wvh 4y agoI don't think this is bad code. Maybe not the most Pythonic in the imperative sense, but certainly you could come across such constructs in languages that are more oriented towards functional programming. This could also be solved in a more readable manner by having a generator pipeline, though it would be a good idea to see what the performance of chained generators is like in your version and flavour of Python.
- kzrdude 4y agoIt's “not even” using for nesting in list comprehensions. This kind of thing: [x for stop in range(5) for x in range(stop)]