2017-04-24 79 views
0

我应该得到一个列表,比移动列表中的部分,以获得下一部分或部分功能:我试图用这个功能从列表中获取批次JPW

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

其次:

UPDATE

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

在此先感谢!

+1

“我希望以40为价值,但我得到了58,有时候我得到了20。对不起,我不明白那句话。你能发布一些实际的输入和输出吗? –

+0

另外,不需要'min'。 'iterable [ndx:ndx + n]'应该可以在任何情况下工作(如果'iterable'支持切片,当然) –

+0

这个任务中'itertools'可能有一些东西 –

回答

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] 
+0

如果不打印出来,然后用'7'然后用14'然后用'20'打印出来'打印(指数)'? –

+0

@ Ev.Kounis为什么? OP在循环中执行'index = index + 1',而不是'index = index + len(i)'。因此,“index”就是循环的迭代次数,即批次数。 –

+0

@ Tobias感谢您的澄清,我现在明白了 – Engine