[英]How to remove all duplicates from list except one element in Python?
我已經知道如何使用set
從List
刪除所有重復項:
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.