Was ist der beste Weg, um eine neue leere Liste in Python zu erstellen?
l = []
oder
l = list()
Ich frage dies aus zwei Gründen:
- Technische Gründe, welche schneller sind. (Das Erstellen einer Klasse verursacht Overhead?)
- Lesbarkeit des Codes - welches ist die Standardkonvention.
python
performance
list
coding-style
timeit
user225312
quelle
quelle
Antworten:
So können Sie testen, welcher Code schneller ist:
In der Praxis ist diese Initialisierung jedoch höchstwahrscheinlich ein äußerst kleiner Teil Ihres Programms. Daher ist es wahrscheinlich falsch, sich darüber Sorgen zu machen.
Die Lesbarkeit ist sehr subjektiv. Ich bevorzuge
[]
, aber einige sehr sachkundige Leute, wie Alex Martelli, bevorzugen,list()
weil es aussprechbar ist .quelle
list('')
geben[]
statt['']
?list('abcd')
und Sie verstehen alles)list()
ist von Natur aus langsamer als[]
, weilEs gibt eine Symbolsuche (Python kann nicht im Voraus wissen, ob Sie die Liste nicht einfach neu definiert haben, um etwas anderes zu sein!).
es gibt Funktionsaufruf,
dann muss überprüft werden, ob ein iterierbares Argument übergeben wurde (damit eine Liste mit Elementen daraus erstellt werden kann) ps. Keine in unserem Fall, aber es gibt eine "Wenn" -Prüfung
In den meisten Fällen macht der Geschwindigkeitsunterschied jedoch keinen praktischen Unterschied.
quelle
list()
langsamer ist als[]
!list()
muss nur geprüft werden, ob überhaupt ein Argument vorhanden ist ... "Überprüfen, ob iterabel" und "Liste mit Elementen erstellen" passieren einfach nicht; Sie gelten nur, wenn es ein Argument gibt. Es ist sogar möglich, dass der C-Code für[]
denselben C-Code wie aufruftlist()
. In jedem Fall wäre die mit (c) verbundene Zeit im Vergleich zu (a) + (b) winzig.Ich benutze
[]
.quelle
Ich weiß es nicht wirklich, aber es scheint mir aus Erfahrung, dass jpcgt tatsächlich richtig ist. Folgendes Beispiel: Wenn ich folgenden Code verwende
Wenn ich im Interpreter t anrufe, bekomme ich nur "t" ohne Liste, und wenn ich etwas anderes anhänge, z
Ich erhalte die Fehlermeldung "Das Objekt 'NoneType' hat kein Attribut 'Anhängen'". Wenn ich jedoch die Liste von erstelle
dann funktioniert es gut.
quelle
t.append(1)
Änderungent
an Ort und Stelle vorgenommen werden und nichts zurückgegeben werden, aberNone
Sie weisen diesNone
zut
. Alsot
bezieht sich jetzt aufNone
statt auf die Liste. Ihr Fehler hier war,t=t.append(1)
statt nur zu schreibent.append(1)
. Sie werden das gleiche Verhalten bei bemerkenlist()
, daher gibt es hier keinen Unterschied.Nur um die Antwort von @Darkonaut hervorzuheben weil ich denke, dass sie besser sichtbar sein sollte.
new_list = []
odernew_list = list()
sind beide in Ordnung (ignorieren die Leistung),append()
kehren aber zurückNone
, als Ergebnis können Sie dies nicht tunnew_list = new_list.append(something
.Ich bin sehr verwirrt über eine solche Entscheidung vom Typ Rückkehr. Yuck.
quelle