2014-02-28 28 views
2

我有以下具有多個重複項的數組,並且我想刪除它們以保持順序。使用列表(set(v))刪除重複項的Python更改數組順序

v = ['maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega', 'maier', 'tapa pure', 'embega'] 

我用list(set(v)),我得到下面的輸出:
['embega', 'maier', 'tapa pure']

我想有是去掉重複的,但保持原有的順序:
['maier', 'tapa pure', 'embega']

我不能使用v[:3]因爲重複長度是可變的。

我該怎麼辦?

在此先感謝。

回答

3
seen_items = set() 
w = [] 
for item in v: 
    if item not in seen_items: 
     w.append(item) 
     seen_items.add(item) 
+0

你做的方式,設置()是不必要的。 seen_items也可能是一個列表,沒有什麼會改變。其實你可以寫'如果項目不在w; w.append(item)' – rantanplan

+4

對於一個集合,列表中的O(n)與O(1)相比將是O(n)。 –

+0

好吧,你是正確的。 – rantanplan

5

您應該使用collections.OrderedDictfromkeys功能,這樣

from collections import OrderedDict 
print OrderedDict.fromkeys(v).keys() 
# ['maier', 'tapa pure', 'embega']