Recursive list comprehension

Peter Otten __peter__ at
Mon Dec 6 10:40:42 CET 2004

Timothy Babytch wrote:

> Hi all.
> I have a list that looks like [['N', 'F'], ['E'], ['D']]
> I try to make it flat one: ['N', 'F', 'E', 'D']
> How can I archieve such an effect with list comprehension?
> Two cycles did the job, but that way did not look pythonic..
> I tried
> print [x for x in y for y in c_vars]
> and got NameError: name 'y' is not defined.

The order of the for expressions is as it would be for nested loops:

>>> items = [['N', 'F'], ['E'], ['D']]
>>> [y for x in items for y in x]
['N', 'F', 'E', 'D']

I would still prefer a for loop because it spares you from iterating over
the sublist items in python:

>>> data = []
>>> for sub in [['N', 'F'], ['E'], ['D']]:
...     data.extend(sub)
>>> data
['N', 'F', 'E', 'D']


More information about the Python-list mailing list