Ich möchte eine leere Liste erstellen (oder was auch immer der beste Weg ist), die 10 Elemente enthalten kann.
Danach möchte ich Werte in dieser Liste zuweisen, zum Beispiel soll dies 0 bis 9 anzeigen:
s1 = list();
for i in range(0,9):
s1[i] = i
print s1
Wenn ich diesen Code ausführe, wird ein Fehler generiert oder in einem anderen Fall nur angezeigt []
(leer).
Kann jemand erklären warum?
[]
) hat per Definition null Elemente. Was Sie offensichtlich wollen , ist eine Liste von falsy Werte wieNone
,0
oder''
.0
bis zu9
erstellen, sollten Sie tatsächlich verwendenfor i in range(0, 10)
, was bedeutetfor (int i = 0, i < 10, i++)
.Antworten:
Sie können einer Liste wie nicht zuweisen
lst[i] = something
, es sei denn, die Liste ist bereits mit mindestensi+1
Elementen initialisiert . Sie müssen append verwenden, um Elemente am Ende der Liste hinzuzufügen.lst.append(something)
.(Sie könnten die Zuweisungsnotation verwenden, wenn Sie ein Wörterbuch verwenden).
Leere Liste erstellen:
Zuweisen eines Werts zu einem vorhandenen Element der obigen Liste:
Denken Sie daran, dass so etwas
l[15] = 5
immer noch fehlschlagen würde, da unsere Liste nur 10 Elemente enthält.range (x) erstellt eine Liste aus [0, 1, 2, ... x-1]
Verwenden einer Funktion zum Erstellen einer Liste:
Listenverständnis (Verwenden Sie die Quadrate, da Sie für die Reichweite nicht alles tun müssen, sondern einfach zurückkehren können
range(0,9)
):quelle
a = [0 for _ in range(10)]
Versuchen Sie stattdessen Folgendes:
Oben wird eine Liste der Größe 10 erstellt, in der jede Position initialisiert wird
None
. Danach können Sie Elemente hinzufügen:Zugegeben, das ist nicht die pythonische Art, Dinge zu tun. Mach das besser:
Oder noch einfacher : In Python 2.x können Sie eine Liste mit Werten von 0 bis 9 initialisieren:
Und in Python 3.x:
quelle
lst = [''] * 10
oderlst = [0] * 10
arr = [None for _ in range(10)]
.Die derzeit akzeptierte Antwort von varunl
Funktioniert gut für Nichtreferenztypen wie Zahlen. Wenn Sie eine Liste mit Listen erstellen möchten, treten leider Referenzierungsfehler auf. Beispiel in Python 2.7.6:
Wie Sie sehen können, zeigt jedes Element auf dasselbe Listenobjekt. Um dies zu umgehen, können Sie eine Methode erstellen, mit der jede Position mit einer anderen Objektreferenz initialisiert wird.
Es gibt wahrscheinlich eine standardmäßige, integrierte Python-Methode (anstatt eine Funktion zu schreiben), aber ich bin mir nicht sicher, was es ist. Würde mich freuen, korrigiert zu werden!
Edit: Es ist
[ [] for _ in range(10)]
Beispiel:
quelle
append
sehr oft dem Listenverständnis unterlegen ist. Sie können Ihre Listenliste über erstellen[ [] for _ in range(10)]
.Sie können
.append(element)
zur Liste, zB :s1.append(i)
. Sie versuchen derzeit, auf ein Element (s1[i]
) zuzugreifen , das nicht vorhanden ist.quelle
Es gibt zwei "schnelle" Methoden:
Es scheint, dass
[None]*x
das schneller ist:Aber wenn Sie mit einer Reichweite (z. B.
[0,1,2,3,...,x-1]
) einverstanden sind , ist diesrange(x)
möglicherweise die schnellste:quelle
list(range(n))
stattdessen verwenden müssen, darange()
keine Liste zurückgegeben wird, sondern ein Iterator ist, und das ist nicht schneller als[None] * n
.Ich bin überrascht, dass niemand diesen einfachen Ansatz zum Erstellen einer Liste leerer Listen vorschlägt. Dies ist ein alter Thread, der der Vollständigkeit halber nur hinzugefügt wird. Dadurch wird eine Liste mit 10 leeren Listen erstellt
quelle
x = [[]] * 10
besteht darin, dass in letzterem jedes Element in der Liste auf das gleiche Listenobjekt zeigt . Wenn Sie also nicht einfach 10 Kopien desselben Objekts möchten, verwenden Sie dierange
basierte Variante, da 10 neue Objekte erstellt werden. Ich fand diese Unterscheidung sehr wichtig.(Dies wurde basierend auf der Originalversion der Frage geschrieben.)
Alle Listen können beliebig viele Elemente enthalten, vorbehaltlich der Begrenzung des verfügbaren Speichers. Die einzige "Größe" einer Liste, die zählt, ist die Anzahl der aktuell darin enthaltenen Elemente .
print display s1
ist keine gültige Syntax; Basierend auf Ihrer Beschreibung dessen, was Sie sehen, gehe ich davon aus, dass Sie es gemeint habendisplay(s1)
und dannprint s1
. Damit dies ausgeführt werden kann, müssen Sie zuvor ein globales Element definiert habens1
, das an die Funktion übergeben werden soll.Durch
display
das Anrufen wird die Liste, die Sie übergeben, nicht wie geschrieben geändert. Ihr Code sagt "s1
ist ein Name für alles, was an die Funktion übergeben wurde; ok, jetzt vergessen wir das Ding zuerst vollständig unds1
verweisen stattdessen auf ein neu erstellteslist
. Jetzt ändern wir daslist
". Dies hat keine Auswirkung auf den übergebenen Wert.Es gibt hier keinen Grund, einen Wert einzugeben. (Es gibt auch keinen wirklichen Grund, eine Funktion zu erstellen, aber das ist nebensächlich.) Sie möchten etwas "erstellen", also ist dies die Ausgabe Ihrer Funktion. Es sind keine Informationen erforderlich, um das von Ihnen beschriebene Objekt zu erstellen. Geben Sie daher keine Informationen weiter
return
.Das würde dir so etwas geben wie:
Das nächste Problem, das Sie feststellen werden, ist, dass Ihre Liste tatsächlich nur 9 Elemente enthält, da der Endpunkt von der
range
Funktion übersprungen wird . (Als Randnotiz[]
funktioniert es genauso gutlist()
, das Semikolon ist unnötig,s1
ist ein schlechter Name für die Variable und es wird nur ein Parameter benötigt,range
wenn Sie von vorne beginnen0
.) Dann haben Sie alsoDies fehlt jedoch immer noch die Marke;
range
ist kein magisches Schlüsselwort, das Teil der Sprache istfor
unddef
ist, sondern eine Funktion. Und raten Sie mal, was diese Funktion zurückgibt? Das ist richtig - eine Liste dieser ganzen Zahlen. Die gesamte Funktion bricht also zusammenund jetzt sehen Sie, warum wir überhaupt keine Funktion selbst schreiben müssen;
range
ist bereits die Funktion, die wir suchen. Auch hier besteht keine Notwendigkeit oder kein Grund, die Liste vorab zu dimensionieren.quelle
Ich bin ein bisschen überrascht, dass der einfachste Weg, eine initialisierte Liste zu erstellen, in keiner dieser Antworten liegt. Verwenden Sie einfach einen Generator in der
list
Funktion:quelle
range(9)
inlist()
? Gibt noch keinerange(9)
Liste zurück?range
ist weder eine Liste noch ein Generator. Es ist eine eingebaute unveränderliche Unterklasse vonSequence
.Eine einfache Möglichkeit, eine 2D-Matrix mit Größe
n
mithilfe verschachtelter Listen zu erstellen :quelle
Hier ist mein Code für die 2D-Liste in Python, die nein lauten würde. von Zeilen aus der Eingabe:
quelle
Ich bin auf diese SO-Frage gestoßen, als ich nach einem ähnlichen Problem gesucht habe. Ich musste ein 2D-Array erstellen und dann einige Elemente jeder Liste (im 2D-Array) durch Elemente aus einem Diktat ersetzen. Ich bin dann auf diese SO-Frage gestoßen, die mir geholfen hat, vielleicht hilft dies anderen Anfängern, sich fortzubewegen. Der Schlüsseltrick bestand darin, das 2D-Array als Numpy-Array zu initialisieren und dann
array[i,j]
anstelle von zu verwendenarray[i][j]
.Als Referenz ist dies der Code, in dem ich Folgendes verwenden musste:
Jetzt weiß ich, dass wir das Listenverständnis verwenden können, aber der Einfachheit halber verwende ich eine verschachtelte for-Schleife. Hoffe das hilft anderen, die auf diesen Beitrag stoßen.
quelle
Machen Sie es als Funktion wiederverwendbarer.
quelle
Verwenden Sie zum Erstellen einer Liste einfach die folgenden Klammern: "[]"
Verwenden Sie list.append (), um einer Liste etwas hinzuzufügen.
quelle
Dieser Code generiert ein Array, das 10 Zufallszahlen enthält.
quelle