我想知道(在Python中)迭代给定大小的列表的分区的最佳方法是什么。
举例来说,我们有列表[1,2,3,4,5],需要k=3分区。一个糟糕的方法是这样写:
[1,2,3,4,5]
k=3
lst = [1,2,3,4,5] for i in range(1,len(lst)): for j in range(i+1, len(lst)): print lst[:i], lst[i:j], lst[j:]
这给
[1], [2], [3,4,5] [1], [2,3], [4,5] ... [1,2,3], [4], [5]
但是,如果我以后想遍历k=4分区,则必须添加for循环嵌套级别,这在运行时无法完成。理想情况下,我想写一些类似的东西:
k=4
for part in partitions([1,2,3,4,5], k): print part
有谁知道最好的方法吗?
如果没有,我会使用与您相同的想法pairwise:
pairwise
from itertools import combinations def partitions(items, k): def split(indices): i=0 for j in indices: yield items[i:j] i = j yield items[i:] for indices in combinations(range(1, len(items)), k-1): yield list(split(indices))