Scr*_*tim 1 python list generator
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]]
# ...
Run Code Online (Sandbox Code Playgroud)
我该如何实施generate_chunks(list, n)?
本质上讲generate_chunks确实是分裂list的n块,并产生这些块的列表.
为了澄清,n指的是块的数量,而不是块的长度.
产生这些块列表的顺序是无关紧要的,但是初始列表中元素的顺序很重要,因此对于给定列表[1, 2, 3],结果[[1], [2, 3]]将是有效的,而[[1], [3, 2]无效.
(最好不使用第三方库)
这是一种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))
Run Code Online (Sandbox Code Playgroud)
例如:
>>> 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]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |