2017-10-15 52 views
-4

在這裏我有一個列表我想刪除重複的從列表(沒有for循環)

a = [1, 2, 1, 4, 5, 7, 8, 4, 6] 

現在我想下一輸出,但沒有for循環。 從列表中刪除所有重複項。

[2, 5, 7, 8, 6] 

輸出列表僅包含單出現次數

+2

'set(a)'將產生一個不重複的結果作爲一個set對象。 – swatchai

+0

@swatchai ...並搞亂了原來的秩序。 – schwobaseggl

+1

輸出的標準是什麼。它是否必須是確切的輸出?換句話說,當你找到重複的東西時,你是否希望刪除第一個匹配項?或者你想要刪除第二個?因爲沒有你提供的細節,list(set(your_list))可能是一個有效的解決方案。但是你的問題很模糊,在這裏仍然缺少你自己的代碼。 – idjaw

回答

1

可以爲了維持原來的順序使用Counter和條件列表理解或filter

from collections import Counter 
c = Counter(a) 
clean_a = filter(lambda x: c[x] == 1, a) # avoids 'for' ;-) 
# clean_a = list(filter(lambda x: c[x] == 1, a)) # Python3, if you need a list 
# clean_a = [x for x in a if c[a] == 1] # would be my choice 
+0

「without for loop」... – efkin

+0

@efkin理解不是for循環,只是因爲有'for'。 – schwobaseggl

+0

對不起...我認爲這是一個類似的實施...我刪除了我的投票。你知道我在哪裏可以閱讀關於它的一些規範嗎? – efkin

1

考慮:a = [1, 2, 1, 4, 5, 7, 8, 4, 6]

One liner:

b = [x for x in a if a.count(x) == 1] 
+0

@Rawing,謝謝,修正! –

0

這是一個非常簡單和低效的實現。

我們使用一個while循環訪問a的每個元素。在循環中,我們檢查當前元素是否在列表中只出現一次。如果是,我們將它添加到新列表中。

a = [1, 2, 1, 4, 5, 7, 8, 4, 6] 
index = 0 
result = [] 
while index < len(a): 
    if a.count(a[index]) == 1: 
     result.append(a[index]) 
    index += 1 

print(result) 
+0

不知道是否值得費心檢查'a [index]'是否不在'result'中,以避免再次計數你知道的元素是唯一的......對於大型'a's和少量唯一值 - 可能值得... –

+0

可能是一個想法。這只是一個額外的代碼行。另一方面,沒有人會在生產中使用它。扔掉這個奇怪的剋制「沒有for循環」,我相信你會找到更好的解決方案。 – Matthias

+0

是的,只要在結果或a.count(a [index])== 1'中做出'如果不是[索引]'那行就行了 - 但是,在任何非教師認爲它是一個好的 - 制約約束的情況下你會使用Counter或類似的。 –