我有一个元组列表,并且如果它的第一项与列表中其他元组的第一项匹配,则需要删除元组。第三项可能相同也可能不同,所以我不能使用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] 删除。
我来说两句