Producing multiple items in a list comprehension

Gerard flanagan grflanagan at gmail.com
Thu May 22 15:14:01 EDT 2008


Joel Koltner wrote:
> Is there an easy way to get a list comprehension to produce a flat list of, 
> say, [x,2*x] for each input argument?
> 
> E.g., I'd like to do something like:
> 
> [ [x,2*x] for x in range(4) ]
> 
> ...and receive
> 
> [ 0,0,1,2,2,4,3,6]
> 
> ...but of course you really get a list of lists:
> 
> [[0, 0], [1, 2], [2, 4], [3, 6]]
> 
> I'm aware I can use any of the standard "flatten" bits of code to turn this 
> back into what I want, but I was hoping there's some way to avoid the "lists 
> of lists" generation in the first place?
> 
> A slightly similar problem: If I want to "merge," say, list1=[1,2,3] with 
> list2=[4,5,6] to obtain [1,4,2,5,3,6], is there some clever way with "zip" to 
> do so?
> 
> Thanks,
> ---Joel
> 
> 
> --
> http://mail.python.org/mailman/listinfo/python-list
> 

For the first part:

def gen(n):
     for i in xrange(n):
         yield i
         yield 2*i

print list(gen(4))

[0, 0, 1, 2, 2, 4, 3, 6]

gerard



More information about the Python-list mailing list