我應該得到一個列表,比移動列表中的部分,以獲得下一部分或部分功能:我試圖用這個功能從列表中獲取批次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
在此先感謝!
我應該得到一個列表,比移動列表中的部分,以獲得下一部分或部分功能:我試圖用這個功能從列表中獲取批次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
在此先感謝!
對於代碼的功能似乎存在一些混淆。當用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]
如果不打印出來,然後用'7'然後用14'然後用'20'打印出來'打印(指數)'? –
@ Ev.Kounis爲什麼? OP在循環中執行'index = index + 1',而不是'index = index + len(i)'。因此,「index」就是循環的迭代次數,即批次數。 –
@ Tobias感謝您的澄清,我現在明白了 – Engine
「我希望以40爲價值,但我得到了58,有時候我得到了20。對不起,我不明白那句話。你能發佈一些實際的輸入和輸出嗎? –
另外,不需要'min'。 'iterable [ndx:ndx + n]'應該可以在任何情況下工作(如果'iterable'支持切片,當然) –
這個任務中'itertools'可能有一些東西 –