在python中混合两个列表的最佳方法

kol*_*llo 8 python list

我们有2个清单

l1 = [1, 2, 3]
l2 = [a, b, c, d, e, f, g...]
Run Code Online (Sandbox Code Playgroud)

结果:

list = [1, a, 2, b, 3, c, d, e, f, g...] 
Run Code Online (Sandbox Code Playgroud)

不能使用zip()因为它将结果缩短到最小list.我还需要一个list输出而不是iterable.

ins*_*get 10

>>> l1 = [1,2,3]
>>> l2 = ['a','b','c','d','e','f','g']
>>> [i for i in itertools.chain(*itertools.izip_longest(l1,l2)) if i is not None]
[1, 'a', 2, 'b', 3, 'c', 'd', 'e', 'f', 'g']
Run Code Online (Sandbox Code Playgroud)

要允许None值包含在列表中,您可以使用以下修改:

>>> from itertools import chain, izip_longest
>>> l1 = [1, None, 2, 3]
>>> l2 = ['a','b','c','d','e','f','g']
>>> sentinel = object()
>>> [i
     for i in chain(*izip_longest(l1, l2, fillvalue=sentinel))
     if i is not sentinel]
[1, 'a', None, 'b', 2, 'c', 3, 'd', 'e', 'f', 'g']
Run Code Online (Sandbox Code Playgroud)


Ray*_*oal 7

另一种可能......

[y for x in izip_longest(l1, l2) for y in x if y is not None]
Run Code Online (Sandbox Code Playgroud)

(当然,从itertools导入izip_longest后)