2013-02-02 15 views

Odpowiedz

55

Można zrobić

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

Ale trzeba naprawdę użyć zestawu, na przykład:

myset = set() 
myset.add(item) 

EDIT: Jeśli kolejność jest ważna, ale lista jest bardzo duża, należy prawdopodobnie użyj zarówno listy i zestaw, jak:

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

W ten sposób uzyskujesz szybkie wyszukiwanie istnienia elementu, ale zachowujesz kolejność. Jeśli użyjesz naiwnego rozwiązania, uzyskasz O (n) wydajność wyszukiwania, a to może być złe, jeśli twoja lista jest duża.

Lub, jak podkreślił @larsman, możesz użyć OrderedDict do tego samego efektu:

from collections import OrderedDict 

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

Nie ma takiej metody jak 'append' dla' set'. Na pewno masz na myśli 'add'. –

+1

Znów, zestawy są * uporządkowane *, więc nie jest to równoważne. –

+0

dzięki, poprawione –

7

Jeśli chcesz mieć unikalne elementy na liście, to dlaczego nie użyć zestawu, jeśli oczywiście kolejność nie ma znaczenia dla Ciebie: -

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

Jeśli zamówienie jest przedmiotem troski, a następnie można użyć: -

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

można również znaleźć OrderedSet receptury, które są przekazywane w Python Documentation

+0

Pamiętaj, że to nie zadziała, jeśli zamówienie jest ważne. –

+0

@ Legatware .. Oczywiście. Dodano ten punkt. –

+0

, więc jeśli chcę, aby numery były w kolejności rosnącej, muszę to zrobić? czy możesz wyjaśnić tę część nieco więcej? (tak, muszę mieć uporządkowany zestaw) – PhoonOne

1

można chyba użyć zestawu obiekt zamiast. Tylko numery add do zestawu. Z natury nie replikują.

2

Jeśli chcesz, aby twoje liczby były w porządku rosnącym, możesz dodać je do zestawu, a następnie posortować zestaw na listę rosnącą.

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 
Powiązane problemy