List Comprehension Question: One to Many Mapping?

Peter Otten __peter__ at web.de
Fri Aug 24 07:28:58 CEST 2007


beginner wrote:

> How do I map a list to two lists with list comprehension?
> 
> For example, if I have x=[ [1,2], [3,4] ]
> 
> What I want is a new list of list that has four sub-lists:
> 
> [[1,2], [f(1), f(2)], [3,4], [f(3), f(4)]]
> 
> [1,2] is mapped to [1,2] and [f(1), f(2)] and [3,4] is mapped to
> [3,4], [f(3), f(4)].
> 
> I just can't find any way to do that with list comprension. 

>>> [a for b in ((item, map(f, item)) for item in x) for a in b]
[[1, 2], [f(1), f(2)], [3, 4], [f(3), f(4)]]

> I ended up 
> using a loop (untested code based on real code):
> 
> l=[]
> for y in x:
>    l.append(y)
>    l.append([f(z) for z in y])

Using a loop gives you clearer code in this case, so I'd use that.

Peter



More information about the Python-list mailing list