it-swarm.com.de

Wann verwenden Sie in Python ein Wörterbuch, eine Liste oder ein Set?

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

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

260
Blankman

Eine list behält die Reihenfolge, dict und set nicht: Wenn Sie sich um die Bestellung kümmern, müssen Sie list verwenden (falls Ihre Auswahl an Containern auf diese drei beschränkt ist, natürlich ;-)).

dict ordnet jedem Schlüssel einen Wert zu, während list und set Werte enthalten: ganz unterschiedliche Anwendungsfälle.

set erfordert, dass Elemente hashierbar sind, list nicht: Wenn Sie nicht-hashable -Elemente haben, können Sie set nicht verwenden und müssen stattdessen list verwenden.

set verbietet Duplikate, list: keine entscheidende Unterscheidung. (Ein "Multiset", das Duplikate für mehr als einmal vorhandene Elemente in eine andere Anzahl einordnet, finden Sie in collections.Counter - Sie könnten eines als dict erstellen, wenn Sie aus irgendeinem seltsamen Grund collections oder nicht importieren konnten vor-2.7 Python als collections.defaultdict(int), wobei die Elemente als Schlüssel und der zugehörige Wert als Zähler verwendet werden).

Die Überprüfung der Mitgliedschaft eines Werts in einer Variablen set (oder dict für Schlüssel) ist unglaublich schnell (etwa eine konstante, kurze Zeit), während in einer Liste Zeit benötigt wird, die der Länge der Liste im Durchschnitt und im ungünstigsten Fall proportional ist. Wenn Sie also hashable Elemente haben, sich nicht um die Reihenfolge oder Duplikate kümmern und eine schnelle Überprüfung der Mitgliedschaft wünschen, ist set besser als list.

559
Alex Martelli
  • Benötigen Sie nur eine bestellte Abfolge von Artikeln? Gehen Sie für eine Liste.
  • Müssen Sie nur wissen, ob Sie bereits haben einen bestimmten Wert, aber ohne Bestellung (und Sie müssen keine Duplikate speichern) haben oder nicht? Verwenden Sie ein Set.
  • Müssen Sie den Schlüsseln Werte zuordnen, um sie später effizient (nach Schlüsseln) nachschlagen zu können? Benutze ein Wörterbuch.
158
Jon Skeet
  • Verwenden Sie ein Wörterbuch, wenn Sie über eindeutige Schlüssel verfügen, die Werten zugeordnet werden.

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

  • Verwenden Sie einen Satz, um einen ungeordneten Satz von Elementen zu speichern.

18
SLaks

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

Wenn Sie eine unveränderliche geordnete Liste von Elementen erfassen möchten, verwenden Sie eine Tuple. (Wenn Sie z. B. ein Paar (Name, Telefonnummer_Nummer) als Element in einem Set verwenden möchten, benötigen Sie ein Tuple-Element und keine Liste, da für Sets ein Element unveränderlich sein muss.).

Wenn Sie eine veränderliche geordnete Liste von Elementen sammeln möchten, verwenden Sie eine list. (Wenn Sie beispielsweise neue Telefonnummern an eine Liste anhängen möchten: [Nummer1, Nummer2, ...]).

Wenn Sie eine Zuordnung von Schlüsseln zu Werten erstellen möchten, verwenden Sie eine dict. (Zum Beispiel, wenn Sie ein Telefonbuch möchten, in dem Namen Telefonnummern zugeordnet werden: {'John Smith' : '555-1212'}). Beachten Sie, dass die Schlüssel in einem Diktum nicht geordnet sind. (Wenn Sie durch ein Diktierbuch (Telefonbuch) iterieren, werden die Tasten (Namen) möglicherweise in beliebiger Reihenfolge angezeigt.

17
unutbu

Obwohl dies nicht sets abdeckt, ist es eine gute Erklärung für dicts und lists:

Listen sind wie es scheint - eine Liste von Werten. Jeder von ihnen ist nummeriert, beginnend mit null - der erste ist mit null nummeriert, der zweite 1, dritte 3 usw. Sie können Werte aus der Liste entfernen und füge neue Werte am Ende hinzu. Beispiel: Ihre vielen Katzennamen.

Wörterbücher ähneln dem, was ihr Name vermuten lässt - ein Wörterbuch . In einem Wörterbuch haben Sie einen 'Index' von Wörtern und für jeden von ihnen ein Definition. In Python heißt das Wort 'Schlüssel' und die Definition ein Wert'. Die Werte in einem Wörterbuch sind nicht nummeriert. was ihr Name vermuten lässt - ein Wörterbuch. In einem Wörterbuch haben Sie ein 'Index' von Wörtern und für jeden eine Definition. Die Werte in ein Wörterbuch ist nicht nummeriert - es gibt keine bestimmte Reihenfolge, entweder - der Schlüssel macht das Gleiche. Sie können .__ hinzufügen, entfernen und ändern. die Werte in Wörterbüchern. Beispiel: Telefonbuch.

http://www.sthurlow.com/python/lesson06/

5
Goose

Wenn ich sie benutze, mache ich ein umfassendes Cheatsheet mit ihren Methoden als Referenz:

class ContainerMethods:
    def __init__(self):
        self.list_methods_11 = {
                    'Add':{'append','extend','insert'},
                    'Subtract':{'pop','remove'},
                    'Sort':{'reverse', 'sort'},
                    'Search':{'count', 'index'},
                    'Entire':{'clear','copy'},
                            }
        self.Tuple_methods_2 = {'Search':'count','index'}

        self.dict_methods_11 = {
                    'Views':{'keys', 'values', 'items'},
                    'Add':{'update'},
                    'Subtract':{'pop', 'popitem',},
                    'Extract':{'get','setdefault',},
                    'Entire':{ 'clear', 'copy','fromkeys'},
                            }
        self.set_methods_17 ={
                    'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
                    'Subtract':{'pop', 'remove','discard'},
                    'Relation':{'isdisjoint', 'issubset', 'issuperset'},
                    'operation':{'union' 'intersection','difference', 'symmetric_difference'}
                    'Entire':{'clear', 'copy'}}
1
JawSaw

Kurz gesagt, verwenden Sie:

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

dict - wenn Sie Werte mit Schlüsseln verknüpfen müssen

set - wenn Sie eindeutige Elemente beibehalten möchten.

Ausführliche Erklärung

Liste

Eine Liste ist eine veränderbare Sequenz, die normalerweise zum Speichern von Sammlungen homogener Elemente verwendet wird.

Eine Liste implementiert alle gängigen Sequenzoperationen:

  • x in l und 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 ersten Auftretens von x in l (um oder nach i und vor j Indecies)

Eine Liste implementiert auch alle veränderlichen Sequenzoperationen:

  • l[i] = x - Item i von l wird ersetzt durch x
  • l[i:j] = t - Scheibe von l von i bis j wird durch den Inhalt des iterablen t ersetzt
  • del l[i:j] - wie l[i:j] = []
  • l[i:j:k] = t - Die Elemente von l[i:j:k] werden durch die von t ersetzt.
  • del l[i:j:k] - Entfernt die Elemente von s[i:j:k] aus der Liste
  • l.append(x) - fügt x an das Ende der Sequenz an
  • l.clear() - entfernt alle Elemente aus l (wie del l[:])
  • l.copy() - Erstellt eine flache Kopie von l (wie l[:])
  • l.extend(t) oder l += t - erweitert l um den Inhalt von t
  • l *= n - aktualisiert l, wobei der Inhalt n Mal wiederholt wird
  • l.insert(i, x) - fügt x in l an dem von i angegebenen Index ein
  • l.pop([i]) - ruft das Objekt unter i ab und entfernt es auch aus l
  • l.remove(x) - entferne den ersten Gegenstand aus l, wobei l[i] gleich x ist
  • l.reverse() - kehrt die Elemente von l um

Eine Liste kann als Stapel verwendet werden, indem die Methoden append und pop verwendet werden.

Wörterbuch

Ein Wörterbuch ordnet Hashwerte beliebigen Objekten zu. Ein Wörterbuch ist ein veränderliches Objekt. Die Hauptoperationen in einem Wörterbuch sind das Speichern eines Werts mit einem Schlüssel und das Extrahieren des Werts mit dem Schlüssel.

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

Set

Ein Set ist eine ungeordnete Sammlung unterschiedlicher Hash-Objekte. Ein Satz wird üblicherweise 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.

1
lmiguelvargasf

In Kombination mit liste, dicts und sets gibt es noch weitere interessante Python-Objekte, OrderedDicts

Geordnete Wörterbücher sind wie normale Wörterbücher, erinnern sich jedoch an die Reihenfolge, in der Elemente eingefügt wurden. Beim Durchlaufen eines geordneten Wörterbuchs werden die Elemente in der Reihenfolge zurückgegeben, in der ihre Schlüssel zuerst hinzugefügt wurden.

OrderedDicts kann nützlich sein, wenn Sie die Reihenfolge der Schlüssel beibehalten möchten, beispielsweise beim Arbeiten mit Dokumenten: Üblicherweise benötigen Sie die Vektordarstellung aller Begriffe in einem Dokument. Mit OrderedDicts können Sie effizient überprüfen, ob ein Begriff zuvor gelesen wurde, Begriffe hinzufügen, Begriffe extrahieren und nach all den Manipulationen die geordnete Vektordarstellung daraus extrahieren.

0
Federico Caccia

Listen sind, wie sie scheinen - eine Liste von Werten. Jeder von ihnen ist von Null ausgehend nummeriert - der erste ist mit Null nummeriert, der zweite 1, der dritte 2 usw. Sie können Werte aus der Liste entfernen und am Ende neue Werte hinzufügen. Beispiel: Ihre vielen Katzennamen.

Tupel sind wie Listen, aber ihre Werte können nicht geändert werden. Die Werte, die Sie zuerst angeben, sind die Werte, die Sie für den Rest des Programms beibehalten. Jeder Wert ist wieder von Null aus nummeriert. Beispiel: die Namen der Monate des Jahres.

Wörterbücher ähneln dem, was ihr Name vermuten lässt - ein Wörterbuch. In einem Wörterbuch haben Sie einen "Index" von Wörtern und für jedes eine Definition. In Python wird das Wort 'Schlüssel' und die Definition 'Wert' genannt. Die Werte in einem Wörterbuch sind nicht nummeriert - ähnlich dem, was ihr Name vermuten lässt - einem Wörterbuch. In einem Wörterbuch haben Sie einen "Index" von Wörtern und für jedes eine Definition. In Python wird das Wort 'Schlüssel' und die Definition 'Wert' genannt. Die Werte in einem Wörterbuch sind nicht nummeriert - sie haben auch keine bestimmte Reihenfolge - der Schlüssel bewirkt dasselbe. Sie können die Werte in Wörterbüchern hinzufügen, entfernen und ändern. Beispiel: Telefonbuch.

0

Für C++ hatte ich immer dieses Flussdiagramm im Auge: In welchem ​​Szenario verwende ich einen bestimmten STL-Container? , also war ich neugierig, ob es auch etwas ähnliches für Python3 gibt, aber ich hatte kein Glück.

Was Sie für Python beachten müssen, ist Folgendes: Es gibt keinen einzigen Python-Standard wie für C++. Daher kann es für verschiedene Python-Interpreter (z. B. CPython, PyPy) große Unterschiede geben. Das folgende Flussdiagramm ist für CPython.

Außerdem habe ich keine gute Möglichkeit gefunden, die folgenden Datenstrukturen in das Diagramm aufzunehmen: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter und arrays.

  • OrderedDict und deque sind über das Modul collections verfügbar.
  • heapq ist im Modul heapq verfügbar
  • LifoQueue, Queue und PriorityQueue sind über das Modul queue verfügbar, das für den gleichzeitigen Zugriff (Threads) ausgelegt ist. (Es gibt auch einen multiprocessing.Queue, aber ich kenne die Unterschiede zu queue.Queue nicht, würde aber davon ausgehen, dass er verwendet werden sollte, wenn gleichzeitiger Zugriff von Prozessen benötigt wird.)
  • dict, set, frozen_set und list sind natürlich eingebaut

Für jeden wäre ich dankbar, wenn Sie diese Antwort verbessern und in jeder Hinsicht ein besseres Diagramm liefern könnten. Fühlen Sie sich frei und willkommen .  flowchart

PS: Das Diagramm wurde mit Yed erstellt. Die Graphml-Datei ist hier

0
math