我知道类似的问题已经在Stack Overflow上被问过很多次了,但是我需要从列表中删除重复的元组,但不仅仅是它们的元素匹配,它们的元素必须是相同的顺序。换句话说,(4,3,5)
和(3,4,5)
都将出现在输出中,而如果同时存在(3,3,5)
和(3,3,5)
,则输出中将只有一个。
具体来说,我的代码是:
import itertools
x = [1,1,1,2,2,2,3,3,3,4,4,5]
y = []
for x in itertools.combinations(x,3):
y.append(x)
print(y)
其中输出相当长。例如,在输出中,应同时存在(1,2,1)
和(1,1,2)
。但是应该只有一个(1,2,2)
。
set
将负责:
您需要的是唯一的排列而不是组合:
不需要执行y = [tuple(sorted(q)) for q in y]
y.sort()
循环,for
产生了一个发生器。
这可能会做您想做的事,但这太过分了。这是生成器的低级原型,有一天may
你真的很近。只是获得排列而不是组合。顺序很重要,排列不重要。因此(1、2、2)是与(2、2、1)不同的排列。但是(1,2,2)被认为是一个1和两个2s的奇异组合。因此,(2,2,1)不被认为是与(1,2,2)的不同组合。]
使用import itertools
x = [1,1,1,2,2,2,3,3,3,4,4,5]
y = []
for x in itertools.permutations(x,3):
y.append(x)
print(set(y))
应该可以。集合基本上是一个不包含任何重复元素的容器。