[Python-ideas] while conditional in list comprehension ??

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Mon Jan 28 14:33:45 CET 2013


Dear all,
I guess this is so obvious that someone must have suggested it before:
in list comprehensions you can currently exclude items based on the if
conditional, e.g.:

[n for n in range(1,1000) if n % 4 == 0]

Why not extend this filtering by allowing a while statement in addition to
if, as in:

[n for n in range(1,1000) while n < 400]

Trivial effect, I agree, in this example since you could achieve the same by
using range(1,400), but I hope you get the point.
This intuitively understandable extension would provide a big speed-up for
sorted lists where processing all the input is unnecessary.

Consider this:

some_names=["Adam", "Andrew", "Arthur", "Bob", "Caroline","Lancelot"]     #
a sorted list of names
[n for n in some_names if n.startswith("A")]
# certainly gives a list of all names starting with A, but .
[n for n in some_names while n.startswith("A")]
# would have saved two comparisons

Best,
Wolfgang 






More information about the Python-ideas mailing list