"Eighty" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
>
> Eighty wrote:
>> I suggest a new extension of the list comprehension syntax:
>>
>> [x for x in xs while cond(x)]
This does not work.
e(x) for x in xs if cond(x)
is an abbreviation of
for x in xs:
if cond(x)
yield e(x)
and similarly with more for and if clauses,
whereas the analogous expansion of your proposal
for x in xs:
while cond(x):
yield e(x)
is an infinite loop and not at all what you mean.
>> which would be equivalent to
>>
>> list(itertools.takewhile(cond, xs))
And what would
x for x in xs while cond(x) if blah(x)
x for x in xs if blah(x) while cond(x)
x*y for x in xs while cond(x) for y in ys
mean? The ability to mix and match clauses after the first for clause is
an important part of comprehension syntax.
>> + "Takewhile operations" occur often, at least for me
So keep using the function provided. I am pretty sure takewhile is rare
for most other people.
> So does no one have a comment on this?
Ain't gonna happen.
> The one objection I can come up with
> is that this would change the set builder notation semantics too much
Yes, to the point where you are hijacking the syntax, for no useful gain,
more than extending it ;-).
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list