通常,您使用
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:
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改用。



