2012-07-18 44 views
0

可能重複:
How do you remove duplicates from a list in Python whilst preserving order?如何刪除列表中的重複值?

讓我們考慮名單:

x = ['a', 'b', 'c', 'c', 'a', 'd', 'z', 'z'] 

我想刪除這些重複的值列表-x和想要的結果爲:

y = ['a', 'b', 'c', 'd', 'z'] 
+3

元素的順序是否重要? – 2012-07-18 12:39:30

+1

他們在這裏回答了這個問題。有或沒有保存順序:http://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-in-python-whilst-preserving-order – 2012-07-18 12:44:12

+0

'z'或'P'有很大的不同,是嗎? – 2012-07-18 12:50:01

回答

10

如果順序並不重要,使用一組:

>>> list(set(['a', 'b', 'c', 'c', 'a', 'd', 'p', 'p'])) 
['a', 'p', 'c', 'b', 'd'] 

如果訂購確實物質,使用OrderedDict

>>> from collections import OrderedDict 
>>> OrderedDict.fromkeys(['a', 'b', 'c', 'c', 'a', 'd', 'p', 'p']).keys() 
['a', 'b', 'c', 'd', 'p'] 
+0

+1,只是一個remarque,不需要傳遞0給''OrderedDict.fromkeys''就是''OrderedDict.fromkeys(['a','b','c','c','a','d ','p','p'])。keys()'' – mouad 2012-07-18 12:43:40

+0

@mouad:的確,已更正。 – 2012-07-18 12:44:24

+0

+1爲一個整潔的解決方案,容易保存訂單 – Levon 2012-07-18 13:33:18

3

由於沒有指出有關維持秩序,這種做法將工作:

x = ['a', 'b', 'c', 'c', 'a', 'd', 'z', 'z'] 

list(set(x)) 

會給你

['a', 'c', 'b', 'd', 'z'] 

通過改變你的列表,你消除所有重複一個set。您應用list()將您的非重複數據更改回列表。

+0

結果不是相同的順序! – mouad 2012-07-18 12:39:50

+1

@mouad在帖子中沒有提到關於訂單,只是消除了重複。 – Levon 2012-07-18 12:42:34

1

你也可以使用

y=[ x[i] for i in range(len(x)) if not x[i] in x[:i]] 

我認爲這將是最簡單的解決方案。

+3

這是一個O(n²),它並不簡單。 – 2012-07-18 12:48:21

+0

嗯,我沒有說這是最快的,但它是一個單線...... – hfhc2 2012-07-18 12:49:47

+2

@ hfhc2:OrderedDict解決方案也是如此。 – 2012-07-18 12:51:26