4 ms·
Hold mine :D https://github.com/anchpop/genomics_viz/blob/master/genomics-viz/Assets/StreamingAssets/Chromosomal/Scripts/chromsdata_tools/chromsdata_tools/compi
by ChadNauseam 4y ago
Hold 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]