Вот чудовищное чудовище, которое делает это:
[x for i in range(3,5) for x in ([i*j if i%2 else i+j for j in range(2)] if i==3 else (i,))]
Я стараюсь сделать это читабельным:
In [12]: result = [
...: x
...: for i in range(3, 5)
...: for x in ((i*j if i%2 else i+j for j in range(2))
...: if i ==3 else (i,))
...: ]
In [13]: print(result)
[0, 3, 4]
Как указано в комментариях, ваше зацикливание не должно быть таким сложным. Вы должны использовать функции здесь, чтобы сделать ваш код более читабельным. Это также сделает использование списочных представлений менее громоздким. Ваша цель не должна быть «держать вещи на одной линии». Ваша цель должна заключаться в том, чтобы "сделать мой код читабельным, понятным, простым и честным". Это понимание списка не является чем-то подобным.
Обратите внимание, я не ожидаю, что это будет работать лучше. Это требует создания дополнительных анонимных контейнеров или генераторов \ списков-пониманий (что требует создания и вызова объекта функции изнутри).
Ваша цель при написании кода не должна заключаться в том, «как мне научиться писать все более сложные понимания списков», скорее, это должно быть «как я пишу и организовываю свой код, чтобы я мог использовать простые и читаемые списочные понимания ».