可能重複:
How do you split a list into evenly sized chunks in Python?大多數Python的方式來組大小爲n塊的迭代器
如果你有一個價值i0, i1, i2, ...
迭代器iter
,什麼是最Python化的方式來獲得一個迭代器,其值爲
[i0, i1, i2], [i3, i4, i5], ...
T他以上將輸出到假設的groupby(iter, 3)
。
可能重複:
How do you split a list into evenly sized chunks in Python?大多數Python的方式來組大小爲n塊的迭代器
如果你有一個價值i0, i1, i2, ...
迭代器iter
,什麼是最Python化的方式來獲得一個迭代器,其值爲
[i0, i1, i2], [i3, i4, i5], ...
T他以上將輸出到假設的groupby(iter, 3)
。
,我可以找到最好的解決方案(需要itertools
):
groupby = lambda s,n : izip(*[iter(s)]*n)
但感覺略微哈克,是很難讀
對於不是塊大小倍數的輸入,通常不能解決問題。 izip基本上忽略了最後一個,而不是完整的項目塊。 – yacc143
itertools模塊裏呼籲grouper
這個配方。這裏是從itertools文檔直接複製的摘錄。
def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
想起它,它與@ user792036提供的解決方案完全相似 –
實際上,它涵蓋了一個填充值,並且在使用時看起來更好,因爲它是一個函數。 – jamylak
更具體地說,[這個答案](http://stackoverflow.com/a/312644/989121)適用於任意迭代。 – georg