一尘不染

遍历Python中的分区

python

我想知道(在Python中)迭代给定大小的列表的分区的最佳方法是什么。

举例来说,我们有列表[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循环嵌套级别,这在运行时无法完成。理想情况下,我想写一些类似的东西:

for part in partitions([1,2,3,4,5], k):
    print part

有谁知道最好的方法吗?


阅读 227

收藏
2021-01-20

共1个答案

一尘不染

如果没有,我会使用与您相同的想法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))
2021-01-20