strange syntax rules on list comprehension conditions

Chris Mellon arkanes at gmail.com
Fri Jan 18 14:04:36 EST 2008


On Jan 18, 2008 12:53 PM, Nicholas <nicholasinparis at gmail.com> wrote:
> I was quite delighted today, after extensive searches yielded nothing, to
> discover how to place an else condition in a list comprehension.
> Trivial mask example:
> >>> [True if i <5 else False for i in range(10)]       # A
> [True, True, True, True, True, False, False, False, False, False]
>
> I then experimented to drop the else statement which yields an error
> >>> [i if i>3 for i in range(10)]
> Traceback (  File "<interactive input>", line 1
> this syntax works of course
> >>> [i if i>3 else i for i in range(10)]
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
> Does anybody else find this lack of symmetry odd?
>

"x if y else x" is an expression - it's the Python equivalent of C's
ternary operator. The mechanism for filtering in a list comp is [x for
x in y if x].

Your stumbling upon the ternary expression was a happy accident, and
your confusing comes from trying to generalize the wrong operation.



More information about the Python-list mailing list