Skip to main content
 首页 » 编程设计

python之从元组列表中删除部分重复的元组

2025年05月04日20mengfanrong

我有一个元组列表,如果它的第一项与列表中其他元组的第一项匹配,则需要删除元组。第三项可能相同也可能不同,所以我不能使用 set(我已经看到这个问题 - Grab unique tuples in python list, irrespective of order 这与我的问题不同)

例如,如果我得到 a 为:

[(0, 13, 'order1'), (14, 27, 'order2'), (14, 27, 'order2.1'),  
 (0, 13, 'order1'), (28, 41, 'order3')] 

我希望输出为:

[(14, 27, 'order2'), (0, 13, 'order1'), (28, 41, 'order3')] 

我正在使用以下代码获得所需的输出。

for e, i in enumerate(a): 
    r = [True if i[0] == k[0] and e != j else False for j, k in enumerate(a)] 
    if any(r): 
        a.pop(e) 
pprint(a) 

是否有更好或更 pythonic 的方法来实现相同的目标?

请您参考如下方法:

通常的方法是将你想要重复数据删除的任何内容键入字典,例如:

>>> a = [(0, 13, 'order1'), (14, 27, 'order2'), (14, 27, 'order2.1'), (0, 13, 'order1'), (28, 41, 'order3')]  
>>> print(*{tup[:2]: tup for tup in a}.values())  
(0, 13, 'order1') (14, 27, 'order2.1') (28, 41, 'order3') 

这是 O(n) 的时间复杂度,优于 O(n log n) 基于 groupby 的方法。