將列表拆分為大約相等長度的N個部分將列表劃分為大致相等的部分的最佳方法是什么?例如,如果列表有7個元素并將其拆分為2個部分,我們希望在一個部分中獲得3個元素,而另一個應該具有4個元素。我正在尋找像even_split(L, n)這樣的東西L分成n幾部分。def chunks(L, n):
""" Yield successive n-sized chunks from L.
"""
for i in xrange(0, len(L), n):
yield L[i:i+n]上面的代碼給出了3個塊,而不是3個塊。我可以簡單地轉置(迭代它并獲取每列的第一個元素,調用第一部分,然后取第二部分并將其放入第二部分等),但這會破壞項目的順序。
3 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
這是一個可以工作的:
def chunkIt(seq, num):
avg = len(seq) / float(num)
out = []
last = 0.0
while last < len(seq):
out.append(seq[int(last):int(last + avg)])
last += avg
return out
測試:
>>> chunkIt(range(10), 3)
[[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
>>> chunkIt(range(11), 3)
[[0, 1, 2], [3, 4, 5, 6], [7, 8, 9, 10]]
>>> chunkIt(range(12), 3)
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
只要你不想要任何像連續塊一樣愚蠢的東西:
>>> def chunkify(lst,n):
... return [lst[i::n] for i in xrange(n)]
...
>>> chunkify(range(13), 3)
[[0, 3, 6, 9, 12], [1, 4, 7, 10], [2, 5, 8, 11]]
添加回答
舉報
0/150
提交
取消