2013-02-02 10 views

risposta

55

Si potrebbe fare

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

Ma si dovrebbe davvero utilizzare un set, come questo:

myset = set() 
myset.add(item) 

EDIT: Se l'ordine è importante, ma l'elenco è molto grande, probabilmente si dovrebbe utilizzare sia un elenco e un set, in questo modo:

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

In questo modo, si ottiene una ricerca rapida dell'esistenza dell'elemento, ma si mantiene l'ordine. Se si utilizza la soluzione ingenua, si otterrà O prestazioni (n) per la ricerca, e che può essere male se l'elenco è grande

O, come @larsman sottolineato, è possibile utilizzare OrderedDict nello stesso senso:

from collections import OrderedDict 

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

Non esiste un metodo come 'append' per' set'. Sicuramente intendevi "aggiungere". –

+1

Di nuovo, i set sono * orderless *, quindi non è equivalente. –

+0

grazie, corretto –

7

Se si desidera avere elementi unici nel proprio elenco, allora perché non utilizzare un set, se ovviamente, l'ordine non ha importanza per voi: -

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

Se l'ordine è una questione di interesse, allora è possibile utilizzare: -

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

si possono anche trovare un OrderedSet ricetta, cui si fa riferimento in Python Documentation

+0

Si noti che questo non funzionerà se l'ordine è importante. –

+0

@Lattyware .. Naturalmente. Aggiunto questo punto. –

+0

quindi se voglio che i numeri siano in ordine crescente, devo farlo? potresti spiegare quella parte un po 'di più? (sì, devo avere un set ordinato) – PhoonOne

1

probabilmente si potrebbe utilizzare un oggetto set, invece. Solo numeri add sul set. Di per sé non si replicano.

2

Se si desidera che i numeri siano in ordine crescente, è possibile aggiungerli in un set e quindi ordinare il set in un elenco crescente.

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 
Problemi correlati