Antworten:
A listhält Ordnung dictund setnicht: 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 ;-).
dictordnet jedem Schlüssel einen Wert zu, während listund setenthält nur Werte: offensichtlich sehr unterschiedliche Anwendungsfälle.
seterfordert, dass Elemente hashbar sind, listnicht: Wenn Sie nicht hashbare Elemente haben, können Sie diese nicht verwenden setund müssen sie stattdessen verwenden list.
setverbietet Duplikate, listnicht: 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 dictnach 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, setist 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 ll[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 xin l(bei oder nach iund vor jIndeces)Eine Liste implementiert auch alle veränderlichen Sequenzoperationen:
l[i] = x- Artikel ivon lwird ersetzt durchxl[i:j] = t- Scheibe von lvon ibis jwird durch den Inhalt der iterablen ersetzttdel l[i:j] - gleich wie l[i:j] = []l[i:j:k] = t- Die Elemente von l[i:j:k]werden durch die von ersetzttdel l[i:j:k]- Entfernt die Elemente von s[i:j:k]aus der Listel.append(x)- wird xan 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 lmit dem Inhalt vontl *= n- Updates lmit seinem Inhalt wiederholt nZeitenl.insert(i, x)- fügt xin lden vonil.pop([i])- ruft das Objekt bei ab iund entfernt es auch vonll.remove(x)- Entfernen Sie das erste Element aus ldem l[i]gleich xl.reverse()- kehrt die Gegenstände lan Ort und StelleEine Liste könnte als Stapel verwendet werden, indem die Methoden appendund 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 sets abdeckt , ist es eine gute Erklärung für dicts und lists:
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.
OrderedDictund dequesind über collectionsModul verfügbar .heapqist im heapqModul erhältlichLifoQueue,, Queueund PriorityQueuesind über das queueModul verfügbar, das für den gleichzeitigen Zugriff (Threads) ausgelegt ist. (Es ist auch eine multiprocessing.Queueverfügbar, aber ich kenne die Unterschiede nicht, queue.Queuewürde aber davon ausgehen, dass sie verwendet werden sollte, wenn ein gleichzeitiger Zugriff von Prozessen erforderlich ist.)dict, set, frozen_set, Und listsind 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.