Python 返回在多个不同索引处匹配的重复元组

Python 返回在多个不同索引处匹配的重复元组,python,python-2.7,Python,Python 2.7,我有嵌套在列表中的元组,即[(0,1,2,3,4,5,6,7),(等)] 我试图返回索引0和1以及3到5处匹配的元组(并保持元组中数据的顺序) 因此,使用下面的代码,我试图删除重复项,然后将其与原始列表进行比较,以确定删除的重复项: seen = set() seen_add = seen.add newL = [] for a in myList: if a[:2] not in seen and not seen_add(a[:2]): if a[3:6] not

我有嵌套在列表中的元组,即[(0,1,2,3,4,5,6,7),(等)]

我试图返回索引0和1以及3到5处匹配的元组(并保持元组中数据的顺序)

因此,使用下面的代码,我试图删除重复项,然后将其与原始列表进行比较,以确定删除的重复项:

seen = set()
seen_add = seen.add
newL = []
for a in myList:
     if a[:2] not in seen and not seen_add(a[:2]):
        if a[3:6] not in seen and not seen_add(a[3:6]):
            newL.append(a)



result = list(set(myList) - set(newL))
for i in result: print i
但是第一部分删除了一个甚至没有重复的元组

注意:删除前两个元素的代码来自此处(由Martijn Pieters编写):;但删除其他元素导致了上述“错误”

返回重复项(此代码在@unutbu的答案后面)


如果希望在
a[:2]+a[3:6]
相同时将元素视为匹配,则需要添加
a[:2]+a[3:6]
所见
,而不是
a[:2]
a[3:6]

seen = set()
seen_add = seen.add
newL = [a  for a in myList
        if a[:2]+a[3:6] not in seen
        and not seen_add(a[:2]+a[3:6])]
newL
将包含
myList
中的“唯一”元素,保留顺序。请注意,调用
set(myList)
将破坏
myList
中项目的顺序,因此

result = list(set(myList) - set(newL))

将包含重复的元素,但不会保留顺序。

我觉得很愚蠢,但。。。这段代码真的符合你的解释吗:“我试图返回索引0和1以及3到5之间匹配的元组(并保持元组中数据的顺序)”?那么我一定是问了一个愚蠢的问题的人:P你是对的,尽管我只是想弄清楚,但我会添加最后一部分(在我的帖子中)返回重复的元组作为下面@unutbu代码的结果。太好了,谢谢:)我将回答问题的最后一部分,将重复的元组返回到我原来的帖子中。但谢谢你,我为这个挠头的时间比我想说的要长:P
result = list(set(myList) - set(newL))