gpt4 book ai didi

python - 在Python中按(n) block 迭代迭代器?

转载 作者:IT老高 更新时间:2023-10-28 21:08:02 25 4
gpt4 key购买 nike

你能想出一个很好的方法(也许使用 itertools)来将迭代器分成给定大小的 block 吗?

因此 l=[1,2,3,4,5,6,7]chunks(l,3) 成为迭代器 [1 ,2,3], [4,5,6], [7]

我可以想到一个小程序来做到这一点,但可能不是使用 itertools 的好方法。

最佳答案

itertools 文档的 recipes 中的 grouper() 配方接近你想要的:

def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)

不过,它会用一个填充值填充最后一个 block 。

一种不太通用的解决方案,它只适用于序列,但可以根据需要处理最后一个 block

[my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]

最后,一个适用于通用迭代器并按需要运行的解决方案是

def grouper(n, iterable):
it = iter(iterable)
while True:
chunk = tuple(itertools.islice(it, n))
if not chunk:
return
yield chunk

关于python - 在Python中按(n) block 迭代迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com