Luis M. Gonzalez wrote: > Hi there, > > I'd like to know if there is a way to add and else condition into a > list comprehension. I'm sure that I read somewhere an easy way to do > it, but I forgot it and now I can't find it... > > for example: > z=[i+2 for i in range(10) if i%2==0] > what if I want i [sic] to be "i-2" if i%2 is not equal to 0?
z = [i + (2, -2)[i % 2] for i in range(10)] In general, the expression "T if C is true, or F if C is false" can be written as (F, T)[bool(C)]. (If you know that C will always be either 0 or 1, as is the case here, the "bool" is redundant.) Unless, of course, either F or T has side effects. For a side-effect free expression, you can use (C and [T] or [F])[0] or one of the many other ternary operator substitutes. (Search for PEP 308.) -- http://mail.python.org/mailman/listinfo/python-list