Python implementiert das Entfernen von Duplikaten aus einer Sequenz, während die Reihenfolge der Elemente unverändert bleibt

不言
Freigeben: 2018-10-15 14:15:33
nach vorne
2482 Leute haben es durchsucht

In diesem Artikel geht es um die Python-Implementierung, Duplikate aus einer Sequenz zu entfernen und die Reihenfolge der Elemente unverändert zu lassen. Ich hoffe, dass er für Sie hilfreich ist. helfen.

1. Anforderungen

Wir möchten doppelte Elemente entfernen, die in der Sequenz erscheinen, aber dennoch die Reihenfolge der verbleibenden Elemente unverändert lassen.

Wenn Sie nur Duplikate entfernen möchten, ist es normalerweise eine einfache Möglichkeit, einen Satz zu erstellen:

a=[1,5,4,36,7,8,2,3,5,7]
#结果为:{1, 2, 3, 4, 5, 36, 7, 8}
print(set(a))
Nach dem Login kopieren

2. Lösung

Wenn der Wert in der Wenn die Sequenz hashbar ist, kann dieses Problem leicht durch die Verwendung von Sammlungen und Generatoren gelöst werden.

Wenn ein Objekt hashbar ist, muss es während seiner Lebensdauer unveränderlich sein und es muss über eine __hash__()-Methode verfügen. Ganzzahlen, Gleitkommazahlen, Zeichenfolgen und Elemente sind alle unveränderlich.
def dedupe(items):
    seen=set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)

a=[1,2,3,1,9,1,5,10]
print(list(dedupe(a)))
Nach dem Login kopieren

Ergebnis ausführen:

[1, 2, 3, 9, 5, 10]
Nach dem Login kopieren

Dies ist nur möglich, wenn die Elemente in der Sequenz hashbar sind. Wenn Sie Duplikate aus einer nicht hashbaren Objektsequenz entfernen möchten, müssen Sie den obigen Code leicht ändern:

def dedupe(items,key=None):
    seen=set()
    for item in items:
        value=item if key is None else key(item)
        if value not in seen:
            yield item
            seen.add(value)

a=[
    {'x':1,'y':2},
    {'x':1,'y':3},
    {'x':1,'y':4},
    {'x':1,'y':2},
    {'x':1,'y':3},
    {'x':1,'y':1},

]
print(list(dedupe(a,key=lambda d:(d['x'],d['y']))))

print(list(dedupe(a,key=lambda d:d['y'])))
Nach dem Login kopieren

Laufende Ergebnisse:

[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]
Nach dem Login kopieren

Die Funktion des Parameterschlüssels besteht hier darin, anzugeben Eine Funktion zur Konvertierung der Elemente in der Sequenz in einen hashbaren Typ, um Duplikate zu erkennen.

Das obige ist der detaillierte Inhalt vonPython implementiert das Entfernen von Duplikaten aus einer Sequenz, während die Reihenfolge der Elemente unverändert bleibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage