Ich verstehe, dass beide im Wesentlichen dasselbe sind, aber was den Stil betrifft, welcher ist der bessere (pythonischere), um eine leere Liste oder ein leeres Diktat zu erstellen?
python
performance
list
dictionary
Noah McIlraith
quelle
quelle
list(i for i in range(10) if i % 2)
timeit()
Funktion die Gesamtzeit für die Ausführung einer bestimmten Anzahl von Iterationen an, was1000000
standardmäßig der Fall ist . Die obigen Beispiele geben also die Anzahl der Sekunden an, in denen das Code-Snippet millionenfach ausgeführt wird. Zum Beispieltimeit('dict()', number=1) // -> 4.0531158447265625e-06
(eine Iteration) währendtimeit('dict()') // -> 0.12412905693054199
(eine Million Iterationen)Meiner Meinung nach
[]
und{}
sind die pythonischsten und lesbarsten Möglichkeiten, leere Listen / Diktate zu erstellen.Seien Sie jedoch vorsichtig
set()
, zum Beispiel:Kann verwirrend sein. Der erste erstellt eine Menge mit einem Element, der zweite erstellt ein leeres Diktat und keine Menge.
quelle
{}
schafft immer ein leeres Diktat.{1,2,3}
Erstellt einen Satz in 2.7+, ist jedoch in2.6
und in älteren Versionen ein Syntaxfehler .some_epic_set
, die auf ein leeresdict
Objekt zeigt. Es ist keine leere Menge. Für einen leeren Satz müssen Sie verwendenset()
.{5}
die eine Menge mit einem Element erstellt5
und{}
ein leeres Diktat ist.{*()}
eine leere machenset
mit Literalsyntax. Ich nenne es den einäugigen Affenoperator. :-)Die dict wörtliche könnte ein seine winzig bisschen schneller als Bytecode kürzer:
Gleiches gilt für die
list
vs[]
quelle
CALL_FUNCTION
nimmt zumindest so viel Zeit wieBUILD_MAP
(die Funktion im Wesentlichen ist genannt zu werdenBUILD_MAP
), undLOAD_GLOBAL
dauert nur zusätzlichen Aufwand ist.IMHO, mit
list()
unddict()
lässt Ihr Python wie C. Ugh aussehen.quelle
Im Falle eines Unterschieds zwischen [] und list () gibt es eine Gefahr, auf die ich noch niemanden hingewiesen habe. Wenn Sie ein Wörterbuch als Mitglied der Liste verwenden, führen die beiden zu völlig unterschiedlichen Ergebnissen:
quelle
[foo_dict]
mitlist((foo_dict,))
. Daslist()
Methode verwendet eine iterable als einzigen Parameter und iteriert darüber, um der Liste Elemente hinzuzufügen. Dies führt zu einer ähnlichen Gefahr,list(some_list)
wodurch die Liste abgeflacht wird.list () und [] funktionieren unterschiedlich:
list () erstellt immer ein neues Objekt im Heap, aber [] kann die Speicherzelle aus vielen Gründen wiederverwenden.
quelle
Es gibt einen Unterschied im Verhalten zwischen [] und list (), wie das folgende Beispiel zeigt. Wir müssen list () verwenden, wenn wir die Liste der Zahlen zurückgeben möchten, sonst erhalten wir ein Kartenobjekt! Ich bin mir nicht sicher, wie ich es erklären soll.
quelle
Ein Kastenklammerpaar bezeichnet eines der Listenobjekte oder einen Indexindex, my_List [x].
Ein geschweiftes Klammerpaar bezeichnet ein Wörterbuchobjekt.
a_list = ['on', 'off', 1, 2]
a_dict = {on: 1, off: 2}
quelle
Es ist meistens eine Frage der Wahl. Es ist eine Frage der Präferenz.
Beachten Sie jedoch, dass Sie Folgendes nicht tun können, wenn Sie beispielsweise Zifferntasten haben:
Du musst:
quelle
mydict = {1:"foo", 2:"bar"}
(ohne Anführungszeichen für Schlüssel).