else condition in list comprehension

Steven Bethard steven.bethard at gmail.com
Mon Jan 10 11:13:17 EST 2005

Luis M. Gonzalez wrote:
> It's me wrote:
>>> z = [i + (2, -2)[i % 2] for i in range(10)]
>> But then why would you want to use such feature?  Wouldn't that make
>> the code much harder to understand then simply:
>> z=[]
>> for i in range(10):
>>     if  i%2:
>>         z.append(i-2)
>>     else:
>>         z.append(i+2)
>> Or are we trying to write a book on "Puzzles in Python"?
> Once you get used to list comprehensions (and it doesn't take long),
> they are a more concise and compact way to express these operations.

After looking the two suggestions over a couple of times, I'm still 
undecided as to which one is more readable for me.  The problem is not 
the list comprehensions (which I love and use extensively).  The problem 
is the odd syntax that has to be used for an if/then/else expression in 
Python.  I think I would have less trouble reading something like:

     z = [i + (if i % 2 then -2 else 2) for i in range(10)]

but, of course, adding a if/then/else expression to Python is unlikely 
to ever happen -- see the rejected PEP 308[1].


[1] http://www.python.org/peps/pep-0308.html

More information about the Python-list mailing list