如果有相同的元组,包括项目顺序,则从列表中删除重复的元组

问题描述 投票:17回答:6

我知道类似的问题已经在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)

python list duplicates tuples itertools
6个回答
33
投票

set将负责:


2
投票

您需要的是唯一的排列而不是组合:


1
投票

不需要执行y = [tuple(sorted(q)) for q in y] y.sort() 循环,for产生了一个发生器。


1
投票

这可能会做您想做的事,但这太过分了。这是生成器的低级原型,有一天may


1
投票

你真的很近。只是获得排列而不是组合。顺序很重要,排列不重要。因此(1、​​2、2)是与(2、2、1)不同的排列。但是(1,2,2)被认为是一个1和两个2s的奇异组合。因此,(2,2,1)不被认为是与(1,2,2)的不同组合。]


0
投票

使用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)) 应该可以。集合基本上是一个不包含任何重复元素的容器。

© www.soinside.com 2019 - 2024. All rights reserved.