2017-04-24 32 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