是否有一个内置功能可以像这样工作,zip()但是会填充结果,以便结果列表的长度是最长输入而不是最短输入的长度?
zip()
>>> 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)]
在Python 3中,你可以使用 itertools.zip_longest
itertools.zip_longest
>>> list(itertools.zip_longest(a, b, c)) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
你可以None使用与fillvalue参数不同的值进行填充:
fillvalue
>>> list(itertools.zip_longest(a, b, c, fillvalue='foo')) [('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]
使用Python 2,你既可以使用itertools.izip_longest(Python的2.6+),也可以使用map与None。这是的鲜为人知的功能map(但map在Python 3.x中有所更改,因此仅在Python 2.x中有效)。
itertools.izip_longest(Python的2.6+)
>>> map(None, a, b, c) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]