2016-10-31 4 views
0

ich für etwas Hilfe hier bin auf der Suche, ich habe eine Liste, die genau diesePython Entfernen Duplikate 3 zu einer Zeit

Liste wie folgt aus: [1, 1, 1, 5, 5, 5, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 8]

gewünschtes Ergebnis: [1, 5, 10, 10, 8, 8]

I Ich habe jeden möglichen Weg ausprobiert, indem ich die Liste 3 auf einmal durchgegangen bin und nur jedes dritte ersetzt habe.

Ich kann einfach nicht meinen Kopf herumkommen es gibt dort einige Python-Zauberer, die das tun können?

Dank

+0

was Ergebnis für eine solche Liste wird erwartet = [1,1,1,1,1]? Es – Alex

+6

In diesem Fall ist eine einfache Scheibe alles was Sie brauchen: '[1, 1, 1, 5, 5, 5, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 8] [:: 3] '. – chepner

+0

Wird es immer Duplikate geben? Was würde '[1,2,3]' zurückgeben? –

Antwort

7

versuchen

foo = [1, 1, 1, 5, 5, 5, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 8] 
print foo[::3] 

Diese "Liste Slicing" genannt wird. Was dies praktisch macht, ist, dass es jedes dritte Argument Ihrer Liste ausgibt, beginnend mit dem ersten. Dieser Artikel Explain Python's slice notation erläutert das Konzept genauer.

+0

das hat funktioniert !! Python ist erstaunlich Danke – NullOverFlow

+1

Sie könnten die Antwort akzeptieren, wenn Sie damit zufrieden sind. Vielen Dank. – Hannu

1

Code:

lst = [1, 1, 1, 5, 5, 5, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 8] 
output = [] 

skip = 0 
for idx, x in enumerate(lst): 
    if skip: 
     skip = skip - 1 
     continue 

    if (idx + 2) <= len(lst): 
     if lst[idx] == lst[idx+1] and lst[idx] == lst[idx+2]: 
      output.append(lst[idx]) 
      skip = skip + 2 
    else: 
     output.append(lst[idx]) 

print output 
Verwandte Themen