2011-10-30 42 views
0

我已經知道如何從List使用set刪除所有重複:如何從列表中刪除除Python中的一個元素以外的所有重複項?

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

一種方法是添加回到額外刪掉4 S:

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] 
相關問題