我正在尝试为值列表创建所有可能的组合,例如(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)]