我发现以下代码与python2兼容
from itertools import izip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
但是, 这不适用于 Python 3 。我收到以下错误
ImportError: cannot import name izip_longest
有人可以帮忙吗?
我想将我的列表 [1,2,3,4,5,6,7,8,9]
转换为 [[1,2,3],[4,5,6],[7,8,9]]
编辑
现在 Python3 兼容
下面的代码改编自所选答案。只需将名称从 izip_longest
更改为 zip_longest
。
from itertools import zip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
原文由 Mulan 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python 3 的
itertools
中有一个名为zip_longest
的函数。它应该与 Python 2 中的izip_longest
一样。为什么要改名?您可能还会注意到
itertools.izip
现在在 Python 3 中消失了 - 这是因为在 Python 3 中,zip
内置函数现在返回一个迭代器,而在 Python 2 中它返回一个列表.由于不需要izip
函数,因此重命名_longest
变体以保持一致性也是有意义的。