On 5/1/2009 7:31 AM J Kenneth King said...
Chris Rebert <c...@rebertia.com> writes:
b = []
for pair in a:
for item in pair:
b.append(item)
This is much more clear than a nested comprehension.
I love comprehensions, but abusing them can lead to really dense and
difficult to read code.
I disagree on dense and difficult, although I'll leave open the question
of abuse.
b = [ item for pair in a for item in pair ]
This is exactly the code above expressed in comprehension form.
It's worth knowing that a list comprehension is structured identically
to the equivalent for loop. So it really is neither more dense nor more
difficult to read. Further, you can tell immediately from the start of
the list comprehension what you've got -- in this case a list of item(s).
Here with some slight changes...
>>> a = [(1, 2), (3, 4, 7), (5, 6)]
>>> [ item for j in a if len(j)==2 for item in j if item % 2 ]
[1, 5]
...opposed to...
>>> for j in a:
... if len(j)==2:
... for item in j:
... if item % 2:
... b.append(item)
...
>>> b
[1, 5]
>>>
YMMV,
Emile
--
http://mail.python.org/mailman/listinfo/python-list