2017-01-13 1 views
-1

Gibt es eine Möglichkeit, die ursprüngliche Reihenfolge der Elemente in der Liste beizubehalten? mit meinem Code unten ich dieses als AusgabeGibt es eine Möglichkeit, Duplikate in einer Liste zu entfernen, während die ursprüngliche Reihenfolge beibehalten wird?

Werte: [1, 3, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]

Sauber: [5, 2, 4, 1, 3, 0]

ich [1, 2, 0, 4, 5, 3] als "sauber" -Liste brauchen

def remove_duplicates(lst) 
i = len(lst) 
while i>0: 
    while values.count(values[i]>1: 
    values.remove(values[i]) 
    i-=1 
    i-=1 
return 

Die Frage scheint ziemlich einfach mit For-Schleifen und einer neuen Listenausgabe zu lösen, aber ich muss While-Schleifen verwenden und mit nur einer Liste bleiben.

def remove_duplicates(lst): 
new =[] 
for x in lst: 
    if x not in lst: 
    new.append(x) 
return new 
+3

Wie haben Sie die gewünschte Liste als '[1, 2, 0, 4, 5, 3]'? Ich sehe keine Logik dahinter. Zumindest basiert diese Liste weder auf dem ersten Auftreten der Nummer noch auf dem letzten Auftreten. Bitte erläutern Sie die Logik –

+0

@ Miryloth Ihre Ausgabe macht keinen Sinn. Wenn Sie die erste Instanz jeder Zahl in Ihrer Liste nehmen würden, würden Sie "[1,3,0,4,2,5]" erhalten, aber Sie sagen, es sollte "[1, 2, 0, 4, 5 sein , 3] '? –

+0

Mögliches Duplikat von [Wie entfernen Sie Duplikate aus einer Liste, während Sie die Reihenfolge beibehalten?] (Http://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-in- while-preserving-order) –

Antwort

1
def remove_duplicates(lst): 
    i = 0 
    while i < len(lst): 
     j = i + 1 
     while j < len(lst): # check for duplicates of lst[i] and remove them 
      if lst[i] == lst[j]: 
       del lst[j] 
      else: 
       j += 1 # only increment second idx if the item is not removed! 
     i += 1 
    return 

und -prüfung es: (!, Die auf jeden Fall schneller ist, aber ich bin nicht sicher, ob erlaubt)

>>> lst = [1, 3, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0] 
>>> remove_duplicates(lst) 
>>> lst 
[1, 3, 0, 4, 2, 5] 

Sie könnten auch mit einem set implementieren anstelle des zweiten while-Schleife :

def remove_duplicates(lst): 
    i = 0 
    found = set() 
    while i < len(lst): 
     if lst[i] in found: 
      del lst[i] 
     else: 
      found.add(lst[i]) 
      i += 1 
    return 

Ju

list.remove (x)

Entfernen Sie das erste Element aus der Liste, dessen Wert x: st eine kurze Notiz darüber, warum bist Ansatz könnten Sie nicht arbeiten können in der Dokumentation von list.remove finden . Es ist ein Fehler, wenn es keinen solchen Artikel gibt.

Aber Sie möchten alle Vorkommen außer dem ersten entfernen!

Verwandte Themen