我们有一个包含n
整数的列表。列表i
的第a
个元素a[i]
可以交换为任何整数x
,使得0 ≤ x ≤ a[i]
。例如,如果a[i]
为3,则其值可以为0、1、2、3。
任务是使用Python查找此类列表的所有排列。例如,如果列表为
my_list = [2,1,4]
那么可能的排列是:
[0,0,0], [0,0,1], ... [0,0,4],
[0,1,0], [0,1,1], ... [0,1,4],
[1,0,0], [1,0,1], ... [1,0,4],
[1,1,0], [1,1,1], ... [1,1,4],
[2,0,0], [2,0,1], ... [2,0,4],
[2,1,0], [2,1,1], ... [2,1,4]
如何找到所有这样的排列?
答案 0 :(得分:3)
您可以使用>>> type(A.display)
<class 'function'>
的组合来获取列表中每个元素和>>> type(A().display)
<class 'function'>
的所有“有效”值:
range
给予:
itertools.product
有关import itertools
my_list = [2,1,4]
pools = [list(range(y+1)) for y in my_list] # list of lists with all the possible values
permutations = sorted(list(itertools.product(*pools))) # sorted() is optional
的更多信息,请参见here on SO或the docs。
注意:如果只需要排列数量,则可以使用
In [126]: permutations
Out[126]: [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 0, 4), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 0, 4), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 1, 4)]
上面的注释中的注释:Python 3.8在itertools.product
软件包中带有prod
function。
答案 1 :(得分:1)
尝试一下。让我知道我是否误解了您的问题
def permute(l,cnt,n):
if cnt==n:
print(l)
return
limit = l[cnt]
for i in range(limit+1):
l[cnt]=i
permute(l[:n],cnt+1,n)
l =[2,1,4]
permute(l,0,3)