Antworten:
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
.
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.)
Kurz gesagt, verwenden Sie:
list
- wenn Sie eine geordnete Abfolge von Artikeln benötigen.
dict
- wenn Sie Werte mit Schlüsseln verknüpfen müssen
set
- wenn Sie eindeutige Elemente behalten möchten.
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
(bei oder nach i
und vor j
Indeces)Eine Liste implementiert auch alle veränderlichen Sequenzoperationen:
l[i] = x
- Artikel i
von l
wird ersetzt durchx
l[i:j] = t
- Scheibe von l
von i
bis j
wird durch den Inhalt der iterablen ersetztt
del l[i:j]
- gleich wie l[i:j] = []
l[i:j:k] = t
- Die Elemente von l[i:j:k]
werden durch die von ersetztt
del l[i:j:k]
- Entfernt die Elemente von s[i:j:k]
aus der Listel.append(x)
- wird x
an das Ende der Sequenz angehängtl.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
- erstreckt sich l
mit dem Inhalt vont
l *= n
- Updates l
mit seinem Inhalt wiederholt n
Zeitenl.insert(i, x)
- fügt x
in l
den voni
l.pop([i])
- ruft das Objekt bei ab i
und entfernt es auch vonl
l.remove(x)
- Entfernen Sie das erste Element aus l
dem l[i]
gleich xl.reverse()
- kehrt die Gegenstände l
an Ort und StelleEine Liste könnte als Stapel verwendet werden, indem die Methoden append
und genutzt werden pop
.
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.
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.
Obwohl dies nicht set
s abdeckt , ist es eine gute Erklärung für dict
s und list
s:
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.
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. 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.
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
, und arrays
.
OrderedDict
und deque
sind über collections
Modul verfügbar .heapq
ist im heapq
Modul erhältlichLifoQueue
,, Queue
und PriorityQueue
sind über das queue
Modul verfügbar, das für den gleichzeitigen Zugriff (Threads) ausgelegt ist. (Es ist auch eine multiprocessing.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
, Und list
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
In Kombination mit Listen , Dikten und Mengen gibt es noch weitere interessante Python-Objekte, OrderedDicts .
Bestellte 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ü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.
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.
Wenn ich sie benutze, erstelle ich ein ausführliches Cheatsheet ihrer 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'}}
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.