I have my secret perversions as well, so I've got no judgement for you, but I do have to wonder how our editing styles differ if you find that easier to navigate than the equivalent nested for loop.
for bar_vec in bar_mat:
if bar_vec != []:
for y in bar_vec:
if baz(y):
for x in y:
foo(x)
Seeing it written out here, the example looks nice. In real code with more complexity, it takes longer for me to write it, and it usually takes up a lot more space than this. It bugs me how much space it takes up for something that is one idea in my head (Foo all the baz things in bar_vec).
But if there is anyone coming after me, I would write it in this style for their sake, because this style is easier to change.
At least in my code, these nested loop thingies are rarely unique. If I have to do it once I probably have to do it many times. If I'm being mindful, I stop repeating myself and just write a generator so that I can invoke it like:
[foo(x) for x in nonempty(bar_mat)]
Mostly this is because I live in fear of ruff's complexity warning, C901.
I dunno, that seems to be just shame instilled by the toxicity of certain programmer culture.
I mean, it's not the clearest thing to read but labeling it horrible seems to be a judgement call that's unwarranted. And as software developers, we should create an environment that's less hostile to people who write things in ways we wouldn't.
And honestly, that set of list comprehensions has a bit of a lispy functional vibe, which could quite frankly be applauded in certain contexts.