如何在保持元组顺序的同时根据元组的索引值从列表中删除重复的元组?

A.S*_*A.S 6 python python-2.7

我想删除那些在索引0处具有相同值的元组,除了第一次出现.我看了其他类似的问题,但没有得到我正在寻找的特定答案.有人能帮帮我吗?以下是我的尝试.

from itertools import groupby
import random
Newlist = []

abc = [(1,2,3), (2,3,4), (1,0,3),(0,2,0), (2,4,5),(5,4,3), (0,4,1)]

Newlist = [random.choice(tuple(g)) for _, g in groupby(abc, key=lambda x: x[0])]
print Newlist
Run Code Online (Sandbox Code Playgroud)

我的预期输出: [(1,2,3), (2,3,4), (0,2,0), (5,4,3)]

pau*_*ult 5

一种简单的方法是循环遍历列表并跟踪您已找到的元素:

abc = [(1,2,3), (2,3,4), (1,0,3),(0,2,0), (2,4,5),(5,4,3), (0,4,1)]
found = set()
NewList = []
for a in abc:
    if a[0] not in found:
        NewList.append(a)
    found.add(a[0])
print(NewList)
#[(1, 2, 3), (2, 3, 4), (0, 2, 0), (5, 4, 3)]
Run Code Online (Sandbox Code Playgroud)

found是一个set.在每次迭代中,我们检查元组中的第一个元素是否已经存在found.如果没有,我们将整个元组追加到NewList.在每次迭代结束时,我们将元组的第一个元素添加到found.

  • 需要注意的是,这只有在元组的第一个元素是可以清除时才有效(当然,这些数字与给定的例子一样). (2认同)