我有两个清单
a = [1,2,3] b = [9,10]
我想将这两个列表合并(压缩)到一个列表中c,这样
c
c = [(1,9), (2,10), (3, )]
Python的标准库中是否有任何函数可以做到这一点?
通常,您使用itertools.zip_longest以下方法:
itertools.zip_longest
>>> import itertools >>> a = [1, 2, 3] >>> b = [9, 10] >>> for i in itertools.zip_longest(a, b): print(i) ... (1, 9) (2, 10) (3, None)
但是zip_longest用Nones(或您作为fillvalue=参数传递的任何值)填充较短的可迭代项。如果这不是您想要的,则可以使用一种理解来过滤Nones:
zip_longest
None
fillvalue=
for i in (tuple(p for p in pair if p is not None) for pair in itertools.zip_longest(a, b)): print(i)
但是请注意,如果两个可迭代对象都具有None值,则也会将其过滤掉。如果您不想这样做,请定义自己的对象fillvalue=并过滤该对象,而不是None:
_marker = object() def zip_longest_no_fill(a, b): for i in itertools.zip_longest(a, b, fillvalue=_marker): yield tuple(x for x in i if x is not _marker) list(zip_longest_no_fill(a, b)) # [(1, 9), (2, 10), (3,)]
在Python 2上,请itertools.izip_longest改用。
itertools.izip_longest