如何从可迭代对象中一次生成多个对象?
我怎样才能一次从一个可迭代的对象中返回多个项目呢?
比如说,假设我有一个长度不固定的序列,我想要每次循环的时候,按X个连续的项目来处理这些序列中的内容,应该怎么做呢?
2 个回答
2
这里有另一种方法,适用于旧版本的Python,这些版本没有izip_longest这个功能:
def grouper(n, seq):
result = []
for x in seq:
result.append(x)
if len(result) >= n:
yield tuple(result)
del result[:]
if result:
yield tuple(result)
没有填充,所以最后一组可能会少于n个元素。
7
你的问题有点模糊,不过可以看看 itertools
文档里的 grouper
这个例子。
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
用 [iter(iterable)]*n
这个老方法多次压缩同一个迭代器是个老把戏,但把它封装成这个函数可以避免让代码变得复杂,而且它的形式和接口跟很多人会用的一样。这是一个比较常见的需求,没想到它居然不在 itertools
模块里,真有点可惜。