Python:压缩到最长的zip-like函数?

是否有一个像zip()一样工作的内置函数,但会填充结果,以便结果列表的长度是最长input的长度而不是最短input的长度

 >>> a=['a1'] >>> b=['b1','b2','b3'] >>> c=['c1','c2'] >>> zip(a,b,c) [('a1', 'b1', 'c1')] >>> What command goes here? [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)] 

你可以使用itertools.izip_longest (Python 2.6+),也可以使用None 。 这是map一个鲜为人知的特性 (但在Python 3.x中更改了map ,所以这只适用于Python 2.x)。

 >>> map(None, a, b, c) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)] 

对于Python 2.6x,使用itertools模块的izip_longest

对于Python 3,请使用zip_longest (而不是前导i )。

 >>> list(itertools.izip_longest(a, b, c)) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)] 

非itertools Python 3解决scheme:

 def zip_longest(*lists): def g(l): for item in l: yield item while True: yield None gens = [g(l) for l in lists] for _ in range(max(map(len, lists))): yield tuple(next(g) for g in gens)