为数字列表和所有较小的数字创建唯一的组合

时间:2019-05-01 13:37:36

标签: python combinations permutation

我正在尝试为值列表创建所有可能的组合,例如(3,1,2)。通过将第一个元素的值减1,可以生成新的组合:(2,1,2)。

我想这样做并生成所有可能和唯一的组合。 最终,这应该是结果:

[(3,1,2),(2,1,2),(2,1,1),(2,1,0),(3,1,1),(3,1,0 ),(3、0、2),(3、0、1),(3、0、0),(2、0、2),(2、0、1),(2、0、0), (1、1、2),(1、1、1),(1、1、0),(1、0、2),(1、0、1),(1、0、0),(0 ,1、2),(0、1、1),(0、1、0),(0、0、3),(0、0、2),(0、0、1),(0、0 ,0)]

请注意,这些不应生成;

[(3,3,3),(3,3,2),(3,3,1),(3,3,0),(3,2,3),(3,2,2 ),(3、2、1),(3、2、0),(3、1、3),(3、0、3),(2、3、3),(2、3、2), (2,3,1),(2,3,0),(2,2,3),(2,2,2),(2,2,1),(2,2,0),(2 ,1、3),(2、0、3),(1、3、3),(1、3、2),(1、3、1),(1、3、0),(1、2 ,3),(1、2、2),(1、2、1),(1、2、0),(1、1、3),(1、0、3),(0、3、3 ),(0、3、2),(0、3、1),(0、3、0),(0、2、3),(0、2、2),(0、2、1), (0,2,0),(0,1,3)]

我有以下代码为列表中的每个元素创建从0到3的数字组合:


r = 3
v = 3

orders = []

for i in range(0,v+1):
    for i in range(0,v+1):
        orders.append(i)

c = list(itertools.combinations(orders, r))
unq = set(c)
unq = sorted(unq,reverse=True)

count_unq=[]

for i in list(unq):
    count_unq.append(i)
print("length: " + str(len(count_unq)))
print(unq)

结果如下:

长度:64

[(3,3,3),(3,3,2),(3,3,1),(3,3,0),(3,2,3),(3,2,2 ),(3、2、1),(3、2、0),(3、1、3),(3、1、2),(3、1、1),(3、1、0), (3,0,3),(3,0,2),(3,0,1),(3,0,0),(2,3,3),(2,3,2),(2 ,3,1),(2,3,0),(2,2,3),(2,2,2),(2,2,1),(2,2,0),(2,1 ,3),(2,1,2),(2,1,1),(2,1,0),(2,0,3),(2,0,2),(2,0,1 ),(2、0、0),(1、3、3),(1、3、2),(1、3、1),(1、3、0),(1、2、3), (1、2、2),(1、2、1),(1、2、0),(1、1、3),(1、1、2),(1、1、1),(1 ,1、0),(1、0、3),(1、0、2),(1、0、1),(1、0、0),(0、3、3),(0、3 ,2),(0,3,1),(0,3,0),(0,2,3),(0,2,2),(0,2,1),(0,2,0 ),(0、1、3),(0、1、2),(0、1、1),(0、1、0),(0、0、3),(0、0、2), (0,0,1),(0,0,0)]

0 个答案:

没有答案
相关问题