首页 > 解决方案 > 列出给定长度的分组

问题描述

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

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

会给

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

解决这个问题的最佳方法是什么?

标签: python

解决方案


试试这个递归解决方案,警告:如果你的列表变大,这将成倍增长!此外,这将有一些重复,因为订单不同。

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)

推荐阅读