2016-08-02 19 views
1

Ich bin ein Anfänger lernen Python und versuchte, Duplikate aus der Liste zu entfernen, während die Verwendung von (Versuch zu lernen any() und all()).Versuchen zu löschen Duplikate während der Verwendung von jedem(), um durch die

def remove_duplicates(x): 
    l=0 
    for i,item in enumerate(x): 
     if any(l==item for l in x)==True: 
      print (i,item) 
      x=del x[i] 
    return(x) 
x=[1,2,3,1] 
print (remove_duplicates(x)) 

Ich bekomme das folgende Ergebnis.

0 1 
1 3 
[2, 1] 

Anstelle von [2,3,1].

+0

mit 'any()' ist nicht die beste Option für diese Aufgabe. – felipsmartins

+1

Es ist generell eine schlechte Idee, ein Array zu modifizieren, wenn Sie darüber iterieren. Arbeite stattdessen an einer Kopie. – Owen

+1

Da 'item' von' x' genommen wird, 'any (l == item für l in x)' ist * immer * wahr. – chepner

Antwort

1

Ich verstehe, dass Sie versuchen, die Verwendung von "any" und "all" zu lernen, aber es ist keine gute Idee, einen Begriff zu entfernen oder zu löschen, während über eine Liste iteriert. Dies ist die Ursache für das unerwartete Verhalten Ihres Codes. Sie können jedoch einen Satz verwenden, um die vorhandenen Elemente in einer Liste/einem Tupel ohne Duplikate zu erhalten. Zum Beispiel:

a = [0,1,3,1,0,3,4,6,4,5] 
b = set(a) 
print(b) 

Es gibt: set([0,1,3,4,5,6)]

Bitte beachten Sie, dass die Art von b'set' ist. Wenn Sie b sein wollen list können Sie:

b = list(set(a)) 
+1

Sie möchten möglicherweise klarstellen, dass die Reihenfolge nicht beibehalten wird. –

+0

@ cricket_007 Sie haben Recht, es ist wichtig, das Problem der Bestellung zu erwähnen. Danke für die Bearbeitung meiner Antwort, ich wusste nicht, wie ich es machen soll. –

+0

Willkommen. Sie können sehen, wie Fragen und Antworten besser formatiert werden können [http://stackoverflow.com/editing-help] –

0

Wenn Sie die Reihenfolge der Sequenz sich nicht, tun einfach:

list(set(x)) 
+1

Seine Absicht ist es, alles zu lernen, so dass diese Antworten mit nichts helfen – RafaelC