Matteo Dell'Amico wrote: > 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 to be "i-2" if i%2 is not equal to 0? > > You could use > > [(i-2, i+2)[bool(i%2 == 0)] for i in range(10)] > > or, in a less general but shorter way > > [(i+2, i-2)[i%2] for i in range(10)] > > or even > > [i%2 and i-2 or i+2 for i in range(10)]
One should note that the (cond and X or Y) construct only works if X can never produce a false value (such as 0, "", []). In this example, it is okay, but replace 2 with 1 and you will run into trouble for i = 1. Reinhold -- http://mail.python.org/mailman/listinfo/python-list