列表中的排列

时间:2019-07-24 12:20:50

标签: python-3.x list

我们有一个包含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]

如何找到所有这样的排列?

2 个答案:

答案 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 SOthe 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软件包中带有prodfunction

答案 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)