Specific iterator in one line

Filip Gruszczyński gruszczy at gmail.com
Tue Jun 30 04:44:39 EDT 2009

This is purely sport question. I don't really intend to use the answer
in my code, but I am wondering, if such a feat could be done.

I have a following problem: I have a list based upon which I would
like to construct a different one. I could simply use list
comprehensions, but there is an additional trick: for some elements on
this list, I would like to return two objects. For example I have a
list of 0s and 1s and for 0 I would like to add 1 'a' and for 1 I
would like to add 2 'b', like this:

[1, 0, 0, 1] -> ['b', 'b', 'a', 'a', 'b', 'b']

The easy way is to return a tuple ('b', 'b') for 1s and then flatten
them. But this doesn't seem very right - I'd prefer to create a nice
iterable right away. Is it possible to achieve this? Curiosly, the
other way round is pretty simple to achieve, because you can filter
objects using if in list comprehension.

Filip Gruszczyński

More information about the Python-list mailing list