Skip to content

Prüfen, ob die Liste doppelte Elemente enthält in Python

Python

Dieser Artikel genau, wie SIE in Python für Fälle folgende prüfen can, ob es doppelte Elemente (= ob alle Elemente eindeutig sind) in einer Liste gibt:

  • Die Liste enthält keine nicht hashbaren Objekte
  • Die Liste enthält keine hashbaren Objekte

Informationen zum Entfernen oder Extrahieren doppelter Elemente aus der Liste FINDEN SIE im following Artikel.

Überprüfen Sie, ob die Liste doppelte Elemente enthält (es gibt kein nicht hashbares Objekt).

Verwenden Sie set(), wenn die Liste keine nicht hashbaren Objekte wie die Liste enthält. Indem eine Liste an set() übergeben wird, gibt es set zurück, das doppelte Werte werden abgelehnt und nur eindeutige Werte als Elemente bleiben.

Holen Sie sich die Anzahl der Elemente dieser Menge und der ursprünglichen Liste mit der eingebauten Funktion len() und vergleichen Sie.

If die Anzahl der Elemente gleich IST, bedeutet stirbt, dass es keine doppelten Elemente in der ursprünglichen Liste gibt, und if sterben Anzahl der Elemente unterschiedlich ist, bedeutet stirbt, dass die ursprüngliche Liste doppelte Elemente enthält.

Die Funktion, die False zurückgibt, wenn keine doppelten Elemente vorhanden sind, und True, wenn doppelte Elemente vorhanden sind, lautet wie folgt:

def has_duplicates(seq):
    return len(seq) != len(set(seq))

l = [0, 1, 2]
print(has_duplicates(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates(l))
# True

Der obige Beispielcode used list, aber die gleiche Funktion can with tuple used Werden.

Da set keine nicht hashbaren Objekte wie list enthalten darf, tritt bei einer Liste, sterben Eine Liste enthält (zweidimensionale Liste, Liste von Listen), ein Fehler TypeError auf.

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'

Überprüfen Sie, ob die Liste doppelte Elemente enthält (es gibt ein nicht hashbares Objekt).

Bei einer Liste mit einer Liste kann mit folgender Funktion geprüft werden, ob doppelte Elemente vorhanden sind:

def has_duplicates2(seq):
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) != len(unique_list)

l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False

l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True

Erzeugt eine Liste mit nur eindeutigen Werten unter Verwendung von Listenverständnis anstelle von set() und vergleicht die Anzahl der Elemente. Nichts finden Sie im folgenden Artikel.

Diese Funktion funktioniert auch für Listen, die keine nicht hashbaren Objekte wie Listen enthalten.

l = [0, 1, 2]
print(has_duplicates2(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True

Das obige Beispiel prüft, ob die Liste dieselbe Liste enthält. Sie können überprüfen, ob die Elemente in jeder Liste dupliziert werden, indem Sie sterben ursprüngliche Liste auf eine Dimension reduzieren und dann überprüfen, ob sie dupliziert sind.

l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]

print(has_duplicates(sum(l_2d, [])))
# False

l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True

In diesem Beispiel WIRD sum() used, um die Liste zu glätten, aber SIE can auch itertools.chain.from_iterable() verwenden. Wenn Sie eine Liste mit mehr als drei Dimensionen übertragen möchten, müssen Sie eine neue Funktion definieren. Siehe folgenden Artikel.