On Jan 18, 2008 12:53 PM, Nicholas <[EMAIL PROTECTED]> 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. -- http://mail.python.org/mailman/listinfo/python-list