我正在尝试查找列表的所有可能分组,以使结果列表具有指定的长度,这是一个示例:
group([2,3,5,6,8], length=3)
会给
[[2,[3,5],[6,8]], [[2,3],5,[6,8]], [2,3,[5,6,8]], ...
什么是最好的方法?
答案 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)