2013-02-02 192 views

回答

55

你可以做

if item not in mylist: 
    mylist.append(item) 

但是,你真的應該使用一組,像這樣:

myset = set() 
myset.add(item) 

編輯:如果順序很重要,但是你的列表是非常大的,你應該同時使用清單一套,如下:

mylist = [] 
myset = set() 
for item in ...: 
    if item not in myset: 
     mylist.append(item) 
     myset.add(item) 

通過這種方式,您可以快速查找元素的存在,但是您可以繼續進行排序。如果你使用天真的解決方案,你會得到O(n)的查找性能,如果你的列表很大,這可能會很糟糕

或者@larslars指出,你可以使用OrderedDict來達到同樣的效果:

from collections import OrderedDict 

mydict = OrderedDict() 
for item in ...: 
    mydict[item] = True 
+1

對'set'沒有'append'這樣的方法。你當然意味着'add'。 –

+1

同樣,集合是*無秩序*,所以它不是等價的。 –

+0

謝謝,已更正 –

7

如果你想在你的列表中的獨特元素,那麼爲什麼不使用一組,如果當然,爲了不要緊,你: -

>>> s = set() 
>>> s.add(2) 
>>> s.add(4) 
>>> s.add(5) 
>>> s.add(2) 
>>> s 
39: set([2, 4, 5]) 

如果訂單是值得關注的問題,那麼你可以使用: -

>>> def addUnique(l, num): 
...  if num not in l: 
...   l.append(num) 
...  
...  return l 

您也可以找到一個OrderedSet配方,這被稱爲在Python Documentation

+0

請注意,如果訂單很重要,這將不起作用。 –

+0

@Lattyware ..當然。增加了這一點。 –

+0

所以如果我想讓數字按升序排列,我必須這樣做嗎?你能解釋一下那部分嗎? (是的,我必須有一個有序集合) – PhoonOne

1

你也許可以使用一組對象,而不是。只需要add號碼即可。它們本質上不會複製。

2

如果你希望你的升序排序,你可以將它們添加到一組,然後排序設置成遞增列表編號。

s = set() 
if number1 not in s: 
    s.add(number1) 
if number2 not in s: 
    s.add(number2) 
... 
s = sorted(s) #Now a list in ascending order 
相關問題