从列表jpw获取批次

时间:2017-04-24 15:00:54

标签: python

我有一个函数应该从列表中获取部分,然后在列表中移动以获取下一部分或部分:

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

我尝试使用此功能如下:

.............................
index =0; 
values.clear()

for i in batch(my_data, 40):
   values.append(i)
   index = index +1 
   print('index', index ) 

更新

我所看到的是指数值达到58或20,而我期待40

提前谢谢!

1 个答案:

答案 0 :(得分:1)

关于代码的作用似乎有些混乱。使用n=40调用时,它不会创建40个批次,但是每个批次长度为40个元素。因此,如果您像在循环中那样迭代批次并在每次迭代中增加index,则不必最终在40

看看这个较小的例子:

lst = list(range(20))
for b in batch(lst, 7):
    print(b)

在输出中,您可以看到没有7个但只有3个批次。

[0, 1, 2, 3, 4, 5, 6]
[7, 8, 9, 10, 11, 12, 13]
[14, 15, 16, 17, 18, 19]