-1 python recursion combinations permutation
我需要一个递归函数,它可以替换给定列表和长度的所有可能的排列:
>>> rec_offspring(3,[2,3])
[[2, 2, 2], [3, 2, 2], [2, 3, 2], [3, 3, 2], [2, 2, 3], [3, 2, 3], [2, 3, 3], [3, 3, 3]]
Run Code Online (Sandbox Code Playgroud)
我找到了下面的代码,但它只给出了组合; 它不重复元素,如[222] [322]等.
def choose_sets(mylist,length):
mylen = len(mylist)
if length == 1:
return [[i] for i in mylist]
if length > mylen:
return []
ToRet = []
for k in xrange(mylen):
if mylen - k + 1> length :
for j in choose_sets(mylist[k+1:],length-1):
New = [mylist[k]]
New.extend(j)
ToRet.append(New)
return ToRet
print choose_sets([1,2,3,4,5],3)
Run Code Online (Sandbox Code Playgroud)
这被称为笛卡尔积.您可以使用itertools 模块:
>>> from itertools import product
>>> list(product([2,3], repeat=3))
[(2, 2, 2), (2, 2, 3), (2, 3, 2), (2, 3, 3), (3, 2, 2), (3, 2, 3), (3, 3, 2), (3, 3, 3)]
Run Code Online (Sandbox Code Playgroud)