Iterate an iterator by chunks (of n) in Python?(在Python中按(n)块迭代迭代器?)
问题描述
你能想出一个很好的方法(也许使用 itertools)来将迭代器分成给定大小的块吗?
Can you think of a nice way (maybe with itertools) to split an iterator into chunks of given size?
因此 l=[1,2,3,4,5,6,7] 与 chunks(l,3) 成为迭代器 [1,2,3], [4,5,6], [7]
Therefore l=[1,2,3,4,5,6,7] with chunks(l,3) becomes an iterator [1,2,3], [4,5,6], [7]
我可以想到一个小程序来做到这一点,但可能不是使用 itertools 的好方法.
I can think of a small program to do that but not a nice way with maybe itertools.
推荐答案
itertools 文档的 grouper() 配方.python.org/3/library/itertools.html#itertools-recipes" rel="nofollow noreferrer">recipes 接近你想要的:
The grouper() recipe from the itertools documentation's recipes comes close to what you want:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
不过,它会用一个填充值填充最后一个块.
It will fill up the last chunk with a fill value, though.
一种不太通用的解决方案,它只适用于序列,但可以根据需要处理最后一个块
A less general solution that only works on sequences but does handle the last chunk as desired is
[my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
最后,一个适用于通用迭代器并按需要运行的解决方案是
Finally, a solution that works on general iterators and behaves as desired is
def grouper(n, iterable):
it = iter(iterable)
while True:
chunk = tuple(itertools.islice(it, n))
if not chunk:
return
yield chunk
这篇关于在Python中按(n)块迭代迭代器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在Python中按(n)块迭代迭代器?
基础教程推荐
- 包装空间模型 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 求两个直方图的卷积 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
