3 回答

TA貢獻1827條經驗 獲得超8個贊
通常的方法是從你想要重復數據刪除的任何內容中鍵入一個字典,例如:
>>> 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 的方法。

TA貢獻1775條經驗 獲得超8個贊
您可以在分組的排序列表中獲取每個組的第一個元素:
from itertools import groupby
from operator import itemgetter
a = [(0, 13, 'order1'), (14, 27, 'order2'), (14, 27, 'order2.1'), (0, 13, 'order1'), (28, 41, 'order3')]
result = [list(g)[0] for k, g in groupby(sorted(a), key=itemgetter(0))]
print(result)

TA貢獻1868條經驗 獲得超4個贊
您應該避免在迭代列表時就地修改列表。相反,您可以使用流行的itertools unique_everseen食譜,也可以在 3rd party 中使用more_itertools。只需operator.itemgetter在key參數中使用:
from more_itertools import unique_everseen
from operator import itemgetter
res = list(unique_everseen(L, key=itemgetter(0, 1)))
該解決方案需要O(?)時間,但一般是少比基于字典的溶液有效,盡管它是在它的意圖可以說是更清晰。
添加回答
舉報