迭代Python中的分区 [英] Iterating over partitions in Python

查看:150
本文介绍了迭代Python中的分区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道在Python中迭代分区的最佳方法是什么。

I was wondering what the best way is (in Python) to iterate over partitions of a list of a given size.

比方说,我们有列表 [1,2,3,4,5] 我们想要 k = 3 分区。这样做的一个不好的方法是写:

Say, for example, we have the list [1,2,3,4,5] and we want k=3 partitions. A poor way of doing this would be to write:

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循环嵌套级别,这在运行时无法完成。理想情况下,我想写一些类似于:

But if I later wanted to iterate over k=4 partitions, then I would have to add a level of for loop nesting, which can't be done at runtime. Ideally, I'd like to write something like:

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

有谁知道这样做的最佳方式?

Does anyone know the best way of doing this?

推荐答案

我会使用与你相同的想法,而成对

I would use the same idea as yours without 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))

这篇关于迭代Python中的分区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆