有没有类似拉链的功能可以填充到最长的长度?
是否有一个内置函数,其工作方式类似于 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)]
Is there a built-in function that works like zip()
but that will pad the results so that the length of the resultant list is the length of the longest input rather than the shortest 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)]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
要添加到已经给出的答案中,以下内容适用于任何可迭代对象,并且不使用itertools,回答@ProdIssue的问题:
需要使用sentinel,因此迭代器会产生< code>default_value 不会被错误地识别为空。
To add to the answers already given, the following works for any iterable and does not use
itertools
, answering @ProdIssue's question:The use of
sentinel
is needed so an iterator yieldingdefault_value
will not be erroneously be identified as empty.只需使用迭代器,没什么花哨的。
Just use iterators, nothing fancy.
我使用的是二维数组,但概念与使用 python 2.x 类似:
Im using a 2d array but the concept is the similar using python 2.x:
在Python 3中,您可以使用
itertools.zip_longest
< /a>您可以使用
fillvalue
参数填充与None
不同的值:对于 Python 2,您可以使用
itertools.izip_longest
(Python 2.6+),或者您可以使用map
与无
。 这是一个鲜为人知的map
功能(但是map
在 Python 3.x 中发生了变化,因此这只适用于 Python 2.x)。In Python 3 you can use
itertools.zip_longest
You can pad with a different value than
None
by using thefillvalue
parameter:With Python 2 you can either use
itertools.izip_longest
(Python 2.6+), or you can usemap
withNone
. It is a little known feature ofmap
(butmap
changed in Python 3.x, so this only works in Python 2.x).对于 Python 2.6x,使用
itertools
模块的izip_longest< /代码>
。
对于 Python 3,请使用
zip_longest
代替(没有前导i
)。For Python 2.6x use
itertools
module'sizip_longest
.For Python 3 use
zip_longest
instead (no leadingi
).除了已接受的答案之外,如果您使用的迭代可能具有不同的长度,但不应该,建议传递
strict=True< /code> 到
zip()
(自 Python 3.10 起支持)。引用文档:
In addition to the accepted answer, if you're working with iterables that might be different lengths but shouldn't be, it's recommended to pass
strict=True
tozip()
(supported since Python 3.10).To quote the documentation:
非 itertools Python 3 解决方案:
non itertools Python 3 solution:
非 itertools 我的 Python 2 解决方案:
non itertools My Python 2 solution: