是否有一个内置函数可以正常工作,但它会填充结果,以便结果列表的长度是最长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 中没有一个内置函数可以直接实现这种效果,但是你可以使用 itertools.zip_longest 函数来实现这一点。这个函数会将输入列表进行填充,使得结果列表的长度是最长输入的长度。
itertools.zip_longest
以下是如何使用 itertools.zip_longest 来达到你想要的效果:
from itertools import zip_longest a = ['a1'] b = ['b1', 'b2', 'b3'] c = ['c1', 'c2'] result = list(zip_longest(a, b, c)) print(result)
这将会输出:
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
解释: - zip_longest(a, b, c) 将输入列表进行压缩,如果列表长度不一致,较短的列表将用 None(或指定的填充值)进行填充,以确保结果列表的长度是最长输入列表的长度。 - list() 将 zip_longest 返回的迭代器转换为列表。
zip_longest(a, b, c)
None
list()
zip_longest