簡體   English   中英

如何有效地從 Python 的大列表中刪除重復項?

[英]How can I efficiently remove duplicates from a large list in Python?

我需要從超過 1 億個事物的列表中刪除每個重復項。 我嘗試使用 Set 方法將列表轉換為集合並再次轉換回來,但它太遲鈍、太慢並且占用內存。 是否有其他有效的解決方案來實現這一目標?

如果您願意對列表進行排序,那么這就很簡單了。 首先對其進行排序,然后取出唯一的項目。 這與sort | uniq的方法相同。 sort | uniq在 shell 中,並且可以相當 memory 高效(使用磁盤代替,當然,Python 的內置排序將在內存中)。

Itertools 食譜

def unique_justseen(iterable, key=None):
    "List unique elements, preserving order. Remember only the element just seen."
    # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
    # unique_justseen('ABBcCAD', str.lower) --> A B c A D
    return map(next, map(operator.itemgetter(1), groupby(iterable, key)))

如果這是緩慢的,你有理由關心嗎? 如果您需要經常執行此操作,則說明您處理數據的方式有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM