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

我有一个元组列表,并且如果它的第一项与列表中其他元组的第一项匹配,则需要删除元组。第三项可能相同也可能不同,所以我不能使用set(我已经看到了这个问题-在python列表中抓住唯一的元组,而与顺序无关,这与我的问题不同)

例如,如果我得到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方法来实现相同目的?

威姆

通常的方法是将dict锁定为您想通过其进行重复数据删除的方式,例如:

>>> 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的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章