Heim >Backend-Entwicklung >Python-Tutorial >Python implementiert das Entfernen von Duplikaten aus einer Sequenz, während die Reihenfolge der Elemente unverändert bleibt

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

不言
不言nach vorne
2018-10-15 14:15:332505Durchsuche

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))

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)))

Ergebnis ausführen:

[1, 2, 3, 9, 5, 10]

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'])))

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}]

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen