Use a function to raise StopIteration
and list
to catch it:
>>> def end_of_loop():
... raise StopIteration
...
>>> even = list(end_of_loop() if n == 412 else n for n in numbers if 0 == n % 2)
>>> print(even)
[402, 984, 360, 408, 980, 544, 390, 984, 592, 236, 942, 386, 462, 418, 344, 236, 566, 978, 328, 162, 758, 918]
For those complaining it is not a one-liner:
even = list(next(iter(())) if n == 412 else n for n in numbers if 0 == n % 2)
For those complaining it is hackish and should not be used in production code: Well, you’re right. Definitely.