列出给定长度的分组

时间:2018-10-29 16:43:01

标签: python

我正在尝试查找列表的所有可能分组,以使结果列表具有指定的长度,这是一个示例:

group([2,3,5,6,8], length=3)

会给

[[2,[3,5],[6,8]], [[2,3],5,[6,8]], [2,3,[5,6,8]], ...

什么是最好的方法?

1 个答案:

答案 0 :(得分:0)

请尝试以下递归解决方案,并警告:如果您的列表越来越大,则它将成倍增长!而且,这将有一些重复,因为顺序是不同的。

from itertools import permutations 

master = []
def group(l, num, res=[]):
    if num == 1:
        res.append(l)
        master.append(res)
        return
    for i in range(len(l)-num + 1):
        firstgroup = list({e[:i+1] for e in permutations(l)})
        for each in firstgroup:
            myres = res[:]
            myres.append(list(each))
            lcp = l[:]
            for j in each:
                lcp.remove(j)
            group(lcp, num-1, myres)