gpt4 book ai didi

python - 如何在恒定大小的 block 中拆分可迭代

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

我很惊讶我找不到将可迭代作为输入并返回可迭代的可迭代的“批处理”函数。

例如:

for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]

或:

for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]

现在,我写了一个我认为非常简单的生成器:

def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch

但以上内容并没有给我我所期望的:

for x in   batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]

所以,我错过了一些东西,这可能表明我对 python 生成器完全缺乏了解。有人愿意为我指明正确的方向吗?

[编辑:我最终意识到只有当我在 ipython 中运行它而不是 python 本身时才会发生上述行为]

最佳答案

这可能更有效(更快)

def batch(iterable, n=1):
l = len(iterable)
for ndx in range(0, l, n):
yield iterable[ndx:min(ndx + n, l)]

for x in batch(range(0, 10), 3):
print x

使用列表的示例

data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # list of data 

for x in batch(data, 3):
print(x)

# Output

[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9, 10]

它避免构建新列表。

关于python - 如何在恒定大小的 block 中拆分可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290397/

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