Wann sollte ich ein Wörterbuch, eine Liste oder ein Set verwenden?
Gibt es Szenarien, die für jeden Datentyp besser geeignet sind?
quelle
Wann sollte ich ein Wörterbuch, eine Liste oder ein Set verwenden?
Gibt es Szenarien, die für jeden Datentyp besser geeignet sind?
A list
hält Ordnung dict
und set
nicht: Wenn Sie sich für Ordnung interessieren, müssen Sie diese verwenden list
(wenn Ihre Auswahl an Behältern natürlich auf diese drei beschränkt ist ;-).
dict
ordnet jedem Schlüssel einen Wert zu, während list
und set
enthält nur Werte: offensichtlich sehr unterschiedliche Anwendungsfälle.
set
erfordert, dass Elemente hashbar sind, list
nicht: Wenn Sie nicht hashbare Elemente haben, können Sie diese nicht verwenden set
und müssen sie stattdessen verwenden list
.
set
verbietet Duplikate, list
nicht: auch eine entscheidende Unterscheidung. (Ein "Multiset", das Duplikate für mehr als einmal vorhandene Elemente einer anderen Anzahl zuordnet, befindet sich in collections.Counter
- Sie können eines als dict
, wenn Sie es aus irgendeinem seltsamen Grund nicht importieren konnten collections
, oder in Version 2.7 erstellen Python als collections.defaultdict(int)
(unter Verwendung der Elemente als Schlüssel und des zugehörigen Werts als Anzahl).
Das Überprüfen der Zugehörigkeit zu einem Wert in a set
(oder dict
nach Schlüsseln) ist blitzschnell (dauert ungefähr eine konstante, kurze Zeit), während es in einer Liste im Durchschnitt und im schlimmsten Fall Zeit kostet, die proportional zur Länge der Liste ist. Also, wenn Sie hashable Einzelteile haben, nicht so oder so über Bestellung oder Duplikate Pflege und schnelle Mitgliedschaft Prüfung wollen, set
ist besser als list
.
quelle
Wenn Sie eine ungeordnete Sammlung eindeutiger Elemente wünschen, verwenden Sie a
set
. (Zum Beispiel, wenn Sie alle Wörter in einem Dokument verwenden möchten).Wenn Sie eine unveränderliche geordnete Liste von Elementen sammeln möchten, verwenden Sie a
tuple
. (Wenn Sie beispielsweise ein Paar (Name, Telefonnummer) möchten, das Sie als Element in einem Satz verwenden möchten, benötigen Sie ein Tupel anstelle einer Liste, da für Sätze Elemente unveränderlich sein müssen.)Wenn Sie eine veränderbare geordnete Liste von Elementen sammeln möchten, verwenden Sie a
list
. (Wenn Sie beispielsweise neue Telefonnummern an eine Liste anhängen möchten: [Nummer1, Nummer2, ...]).Wenn Sie eine Zuordnung von Schlüsseln zu Werten wünschen, verwenden Sie a
dict
. (Zum Beispiel, wenn Sie ein Telefonbuch möchten, das Namen Telefonnummern zuordnet :){'John Smith' : '555-1212'}
. Beachten Sie, dass die Tasten in einem Diktat ungeordnet sind. (Wenn Sie ein Diktat (Telefonbuch) durchlaufen, werden die Schlüssel (Namen) möglicherweise in beliebiger Reihenfolge angezeigt.)quelle
Verwenden Sie ein Wörterbuch, wenn Sie über eine Reihe eindeutiger Schlüssel verfügen, die Werten zugeordnet sind.
Verwenden Sie eine Liste, wenn Sie eine bestellte Sammlung von Artikeln haben.
Verwenden Sie einen Satz, um einen ungeordneten Satz von Elementen zu speichern.
quelle
Kurz gesagt, verwenden Sie:
list
- wenn Sie eine geordnete Abfolge von Artikeln benötigen.dict
- wenn Sie Werte mit Schlüsseln verknüpfen müssenset
- wenn Sie eindeutige Elemente behalten möchten.Ausführliche Erklärung
Aufführen
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
undx 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 vonx
inl
(bei oder nachi
und vorj
Indeces)Eine Liste implementiert auch alle veränderlichen Sequenzoperationen:
l[i] = x
- Artikeli
vonl
wird ersetzt durchx
l[i:j] = t
- Scheibe vonl
voni
bisj
wird durch den Inhalt der iterablen ersetztt
del l[i:j]
- gleich wiel[i:j] = []
l[i:j:k] = t
- Die Elemente vonl[i:j:k]
werden durch die von ersetztt
del l[i:j:k]
- Entfernt die Elemente vons[i:j:k]
aus der Listel.append(x)
- wirdx
an das Ende der Sequenz angehängtl.clear()
- Entfernt alle Elemente ausl
(wie dell[:]
)l.copy()
- erstellt eine flache Kopie vonl
(wiel[:]
)l.extend(t)
oderl += t
- erstreckt sichl
mit dem Inhalt vont
l *= n
- Updatesl
mit seinem Inhalt wiederholtn
Zeitenl.insert(i, x)
- fügtx
inl
den voni
l.pop([i])
- ruft das Objekt bei abi
und entfernt es auch vonl
l.remove(x)
- Entfernen Sie das erste Element ausl
deml[i]
gleich xl.reverse()
- kehrt die Gegenständel
an Ort und StelleEine Liste könnte als Stapel verwendet werden, indem die Methoden
append
und genutzt werdenpop
.Wörterbuch
Ein Wörterbuch ordnet Hash-Werte beliebigen Objekten zu. Ein Wörterbuch ist ein veränderliches Objekt. Die Hauptoperationen in einem Wörterbuch bestehen darin, einen Wert mit einem Schlüssel zu speichern und den mit dem Schlüssel gegebenen Wert zu extrahieren.
In einem Wörterbuch können Sie keine Schlüsselwerte verwenden, die nicht hashbar sind, dh Werte, die Listen, Wörterbücher oder andere veränderbare Typen enthalten.
einstellen
Ein Set ist eine ungeordnete Sammlung verschiedener hashbarer Objekte. Ein Satz wird üblicherweise verwendet, um Mitgliedschaftstests, das Entfernen von Duplikaten aus einer Sequenz und das Berechnen mathematischer Operationen wie Schnittmenge, Vereinigung, Differenz und symmetrische Differenz einzuschließen.
quelle
Obwohl dies nicht
set
s abdeckt , ist es eine gute Erklärung fürdict
s undlist
s:http://www.sthurlow.com/python/lesson06/
quelle
Für C ++ hatte ich immer dieses Flussdiagramm im Auge: In welchem Szenario verwende ich einen bestimmten STL-Container? Ich war neugierig, ob etwas Ähnliches auch für Python3 verfügbar ist, aber ich hatte kein Glück.
Was Sie für Python beachten müssen, ist: 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 gilt für CPython.
Außerdem fand ich keine gute Möglichkeit , die folgenden Datenstrukturen in das Diagramm zu übernehmen:
bytes
,byte arrays
,tuples
,named_tuples
,ChainMap
,Counter
, undarrays
.OrderedDict
unddeque
sind übercollections
Modul verfügbar .heapq
ist imheapq
Modul erhältlichLifoQueue
,,Queue
undPriorityQueue
sind über dasqueue
Modul verfügbar, das für den gleichzeitigen Zugriff (Threads) ausgelegt ist. (Es ist auch einemultiprocessing.Queue
verfügbar, aber ich kenne die Unterschiede nicht,queue.Queue
würde aber davon ausgehen, dass sie verwendet werden sollte, wenn ein gleichzeitiger Zugriff von Prozessen erforderlich ist.)dict
,set
,frozen_set
, Undlist
sind gebautet natürlichFü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.
PS: Das Diagramm wurde mit yed erstellt. Die Graphml-Datei ist hier
quelle
In Kombination mit Listen , Dikten und Mengen gibt es noch weitere interessante Python-Objekte, OrderedDicts .
OrderedDicts kann nützlich sein, wenn Sie die Reihenfolge der Schlüssel beibehalten müssen, z. B. beim Arbeiten mit Dokumenten: Es ist üblich, die Vektordarstellung aller Begriffe in einem Dokument zu benötigen. Mit OrderedDicts können Sie also effizient überprüfen, ob ein Begriff zuvor gelesen wurde, Begriffe hinzufügen, Begriffe extrahieren und nach allen Manipulationen die geordnete Vektordarstellung davon extrahieren.
quelle
Listen sind das, was sie scheinen - eine Liste von Werten. Jeder von ihnen ist beginnend mit Null nummeriert - der erste ist mit Null nummeriert, die zweite mit 1, die dritte mit 2 usw. Sie können Werte aus der Liste entfernen und am Ende neue Werte hinzufügen. Beispiel: Die Namen Ihrer vielen Katzen.
Tupel sind wie Listen, aber Sie können ihre Werte nicht ändern. Die Werte, die Sie zuerst aufgeben, sind die Werte, an denen Sie für den Rest des Programms festhalten. Auch hier ist jeder Wert zur leichteren Bezugnahme ab Null nummeriert. Beispiel: die Namen der Monate des Jahres.
Wörterbücher ähneln dem, was ihr Name andeutet - einem Wörterbuch. In einem Wörterbuch haben Sie einen 'Index' von Wörtern und für jedes von ihnen eine Definition. In Python wird das Wort als "Schlüssel" und die Definition als "Wert" bezeichnet. Die Werte in einem Wörterbuch sind nicht nummeriert - ähnlich wie der Name vermuten lässt - ein Wörterbuch. In einem Wörterbuch haben Sie einen 'Index' von Wörtern und für jedes von ihnen eine Definition. In Python wird das Wort als "Schlüssel" und die Definition als "Wert" bezeichnet. Die Werte in einem Wörterbuch sind nicht nummeriert - sie sind auch nicht in einer bestimmten Reihenfolge - der Schlüssel macht dasselbe. Sie können die Werte in Wörterbüchern hinzufügen, entfernen und ändern. Beispiel: Telefonbuch.
quelle
Wenn ich sie benutze, erstelle ich ein ausführliches Cheatsheet ihrer Methoden als Referenz:
quelle
Wörterbuch: Ein Python-Wörterbuch wird wie eine Hash-Tabelle mit Schlüssel als Index und Objekt als Wert verwendet.
Liste: Eine Liste wird zum Halten von Objekten in einem Array verwendet, die nach der Position dieses Objekts im Array indiziert sind.
Set: Ein Set ist eine Sammlung mit Funktionen, die erkennen können, ob ein Objekt im Set vorhanden ist oder nicht.
quelle