簡體   English   中英

如何從列表中刪除除Python中的一個元素之外的所有重復項?

[英]How to remove all duplicates from list except one element in Python?

我已經知道如何使用setList刪除所有重復項:

ls = list(set(ls))

我想知道的是有什么方法可以刪除除一個元素實例之外的所有重復項,與上面的方法一樣有效嗎?

ls = [1, 2, 3, 3, 3, 4, 4]
#i want to keep 4, no matter if it is duplicate but want to remove duplicates from rest
so the output should be:
ls = [1, 2, 3, 4, 4]

一種可能的解決方案是迭代元素並使用條件檢查。 我正在尋找最好的解決方案。

一種方法是添加回額外刪除的4秒:

sl = list(set(ls))
sl += [4] * (ls.count(4) - 1)

或者,只需將4秒附加到新列表:

s = set()
sl = []
for elem in ls:
    if elem == 4 or elem not in s:
        sl.append(elem)
        s.add(elem)

使用set允許恆定時間成員資格測試; 如果你只是使用列表,它將是O(n)。

如果需要,可以將其寫為列表推導,但普通循環更具可讀性:

s = set()
sl = [s.add(elem) or elem for elem in ls if elem == 4 or elem not in s]

暫無
暫無

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

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