338 Stimmen

Wann sollte man in Python ein Dictionary, eine Liste oder eine Menge verwenden?

Wann sollte ich ein Wörterbuch, eine Liste oder ein Set verwenden?

Gibt es Szenarien, die für jeden Datentyp besser geeignet sind?

640voto

Alex Martelli Punkte 805329

A list hält Ordnung, dict et set nicht: Wenn Ihnen die Ordnung wichtig ist, müssen Sie daher die list (natürlich nur, wenn die Auswahl an Behältern auf diese drei beschränkt ist ;-) ).

dict assoziiert jeden Schlüssel mit einem Wert, während list et set nur Werte enthalten: natürlich sehr unterschiedliche Anwendungsfälle.

set erfordert, dass die Elemente hashfähig sind, list nicht: Wenn Sie nicht hashbare Gegenstände haben, können Sie daher set und muss stattdessen list .

set verbietet Duplikate, list nicht: auch das ist ein entscheidender Unterschied. (Ein "Multiset", das Duplikate in eine andere Zählung für mehr als einmal vorhandene Elemente umwandelt, ist zu finden in collections.Counter -- Sie könnten eine als dict wenn Sie aus irgendeinem Grund nicht importieren konnten collections oder, in Python vor 2.7, als collections.defaultdict(int) wobei die Elemente als Schlüssel und der zugehörige Wert als Zähler verwendet werden).

Prüfung auf Zugehörigkeit eines Wertes zu einer set (oder dict (für Schlüssel) ist rasend schnell (es dauert etwa eine konstante, kurze Zeit), während es bei einer Liste im mittleren und schlimmsten Fall proportional zur Länge der Liste dauert. Wenn Sie also hashbare Elemente haben, sich nicht um die Reihenfolge oder Duplikate kümmern und eine schnelle Überprüfung der Zugehörigkeit wünschen, set ist besser als list .

210voto

Jon Skeet Punkte 1325502
  • Benötigen Sie nur eine geordnete Abfolge von Elementen? Entscheiden Sie sich für eine Liste.
  • Müssen Sie nur wissen, ob Sie bereits eine hat einen bestimmten Wert, aber ohne Reihenfolge (und Sie brauchen keine Duplikate zu speichern)? Verwenden Sie ein Set.
  • Müssen Sie Werte mit Schlüsseln verknüpfen, damit Sie sie später effizient (nach Schlüssel) nachschlagen können? Verwenden Sie ein Wörterbuch.

25voto

unutbu Punkte 769083

Wenn Sie eine ungeordnete Sammlung von eindeutigen Elementen wünschen, verwenden Sie eine set . (Zum Beispiel, wenn Sie die Menge aller in einem Dokument verwendeten Wörter suchen).

Wenn Sie eine unveränderliche geordnete Liste von Elementen sammeln wollen, verwenden Sie eine tuple . (Wenn Sie z. B. ein Paar (Name, Telefonnummer) als Element in einer Menge verwenden möchten, benötigen Sie ein Tupel und keine Liste, da für Mengen unveränderliche Elemente erforderlich sind.)

Wenn Sie eine veränderbare geordnete Liste von Elementen sammeln wollen, verwenden Sie eine list . (Zum Beispiel, wenn Sie neue Telefonnummern an eine Liste anhängen wollen: [Nummer1, Nummer2, ...]).

Wenn Sie eine Zuordnung von Schlüsseln zu Werten wünschen, verwenden Sie eine dict . (Zum Beispiel, wenn Sie ein Telefonbuch wünschen, das Namen Telefonnummern zuordnet: {'John Smith' : '555-1212'} ). Beachten Sie, dass die Schlüssel in einem Diktat nicht geordnet sind. (Wenn Sie ein Diktat (Telefonbuch) durchgehen, können die Schlüssel (Namen) in beliebiger Reihenfolge angezeigt werden).

20voto

SLaks Punkte 832502
  • Verwenden Sie ein Wörterbuch, wenn Sie eine Reihe von eindeutigen Schlüsseln haben, die Werten zugeordnet sind.

  • Verwenden Sie eine Liste, wenn Sie eine geordnete Sammlung von Artikeln haben.

  • Verwenden Sie ein Set, um eine ungeordnete Menge von Elementen zu speichern.

14voto

lmiguelvargasf Punkte 50452

Kurz gesagt, verwenden:

list - wenn Sie eine geordnete Abfolge von Artikeln benötigen.

dict - wenn Sie Werte mit Schlüsseln verknüpfen wollen

set - wenn Sie einzigartige Elemente behalten wollen.

Ausführliche Erläuterung

Liste

Eine Liste ist eine veränderbare Sequenz, die in der Regel zur Speicherung von Sammlungen homogener Elemente verwendet wird.

Eine Liste implementiert alle gängigen Sequenzoperationen:

  • x in l et x not in l
  • l[i] , l[i:j] , l[i:j:k]
  • len(l) , min(l) , max(l)
  • l.count(x)
  • l.index(x[, i[, j]]) - Index des 1. Vorkommens von x en l (bei oder nach i und vor j indeces)

Eine Liste implementiert auch alle veränderbaren Sequenzoperationen:

  • l[i] = x - Artikel i de l wird ersetzt durch x
  • l[i:j] = t - Scheibe von l de i a j wird durch den Inhalt der Iterablen ersetzt t
  • del l[i:j] - gleich wie l[i:j] = []
  • l[i:j:k] = t - die Elemente der l[i:j:k] werden ersetzt durch diejenigen von t
  • del l[i:j:k] - entfernt die Elemente von s[i:j:k] aus der Liste
  • l.append(x) - Anhänge x an das Ende der Sequenz
  • l.clear() - entfernt alle Einträge aus l (wie bei del l[:] )
  • l.copy() - erzeugt eine oberflächliche Kopie von l (wie bei l[:] )
  • l.extend(t) o l += t - erweitert l mit dem Inhalt von t
  • l *= n - Aktualisierungen l mit wiederholtem Inhalt n mal
  • l.insert(i, x) - Einsätze x in l bei dem Index, der durch i
  • l.pop([i]) - ruft den Artikel unter i und entfernt es auch aus l
  • l.remove(x) - entfernen Sie den ersten Eintrag aus l donde l[i] ist gleich x
  • l.reverse() - storniert die Posten von l an Ort und Stelle

Eine Liste kann als Stapel verwendet werden, indem man die folgenden Methoden einsetzt append et pop .

Wörterbuch

Ein Wörterbuch bildet hashbare Werte auf beliebige Objekte ab. Ein Wörterbuch ist ein veränderbares Objekt. Die wichtigsten Operationen mit einem Wörterbuch sind das Speichern eines Wertes mit einem Schlüssel und das Extrahieren des Wertes anhand des Schlüssels.

In einem Wörterbuch können Sie keine Werte als Schlüssel verwenden, die nicht hashfähig sind, d. h. Werte, die Listen, Wörterbücher oder andere veränderbare Typen enthalten.

Satz

Eine Menge ist eine ungeordnete Sammlung eindeutiger hashfähiger Objekte. Eine Menge wird häufig zum Testen der Zugehörigkeit, zum Entfernen von Duplikaten aus einer Sequenz und zum Berechnen mathematischer Operationen wie Schnittmenge, Vereinigung, Differenz und symmetrische Differenz verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X