Extended List Comprehension
Tim Chase
python.list at tim.thechases.com
Fri Jan 20 16:26:12 EST 2006
>>py> [x for x in '1234' if x%2 else 'even']
>>[1, 'even', 3, 'even']
>>
>>I'm guessing this has been suggested before?
>
>
> You could (in 2.5) use:
>
> [(x if x%2 else 'even') for x in '1234']
This failed on multiple levels in 2.3.5 (the "if" syntax is
unrecognized, and trying the below with '1234' rather than
[1,2,3,4] choked) Haven't played with 2.5 yet, so this might be
a good way to go if you've got it.
However, this worked in my 2.3.5:
[((x%2 == 0 and 'even') or x) for x in [-2,-1,0,1,2,3,4]]
It uses the fairly defacto short-circuit-evaluation usage to coin
a Python trinary operator like the C/C++ colon/question-mark pair
of operators.
There is a caveat (that can be coded around, IIRC, but don't have
it at the tip of my fingers) that inverting the logic can cause
trouble when x==0 as in
[((x%2 == 0 and x) or 'odd') for x in [-2,-1,0,1,2,3,4]]
which doesn't quite produce the desired results.
-tim at justonemoretim.com
More information about the Python-list
mailing list