for i in generate_chunks([1, 2, 3, 4, 5], 2):
print(i)
# [[1], [2, 3, 4, 5]]
# [[1, 2], [3, 4, 5]]
# [[1, 2, 3], [4, 5]]
# [[1, 2, 3, 4], [5]]
for i in generate_chunks([1, 2, 3, 4, 5], 3):
print(i)
# [[1], [2], [3, 4, 5]]
# [[1, 2], [3], [4, 5]]
# [[1, 2, 3], [4], [5]]
# [[1, 2], [3, 4], [5]]
# ...
如何实现generate_chunks(list, n)?
本质上,generate_chunks 所做的是将 list 分成 n block ,并生成这些 block 的列表。
为了澄清,n 指的是 block 的数量,而不是 block 的长度。
生成这些 block 列表的顺序无关紧要,但初始列表中元素的顺序很重要,因此对于给定列表 [1, 2, 3]结果 [[1], [2, 3]] 将有效,而 [[1], [3, 2] 将无效。
(最好不使用第 3 方库)
请您参考如下方法:
这是一个 itertools基于方法:
import itertools
def chunks(items, cutpoints):
return [items[i:j] for i,j in zip([0] + cutpoints, cutpoints + [len(items)])]
def generate_chunks(items, n):
indices = range(1,len(items))
for cutpoints in itertools.combinations(indices,n-1):
yield chunks(items,list(cutpoints))
例如:
>>> for c in generate_chunks([1,2,3,4,5],4): print(c)
[[1], [2], [3], [4, 5]]
[[1], [2], [3, 4], [5]]
[[1], [2, 3], [4], [5]]
[[1, 2], [3], [4], [5]]
