896 Stimmen

Eine leere Liste mit einer bestimmten Größe in Python erstellen

Wie kann ich eine leere Liste erstellen, die 10 Elemente enthalten kann?

Danach möchte ich in dieser Liste Werte zuweisen. Zum Beispiel:

xs = list()
for i in range(0, 9):
   xs[i] = i

Das ergibt jedoch IndexError: list assignment index out of range . Warum?


Anmerkung der Redaktion:

In Python werden Listen <strong>haben keine festgelegte Kapazität </strong>aber es ist nicht möglich, Elemente zuzuweisen, die nicht bereits vorhanden sind. Die Antworten hier zeigen Code, der eine Liste mit 10 "Dummy"-Elementen erstellt, die später ersetzt werden können. Die meisten Anfänger, die auf dieses Problem stoßen, werden jedoch <em>wirklich nur eine Liste durch Hinzufügen von Elementen erstellen wollen </em>. Dies sollte unter Verwendung der <code>.append</code> Methode, obwohl es oft problemspezifische Möglichkeiten gibt, die Liste direkter zu erstellen. Siehe bitte <a href="https://stackoverflow.com/questions/5653533">Warum gibt dieser iterative Listenerweiterungscode IndexError: list assignment index out of range? Wie kann ich wiederholt Elemente zu einer Liste hinzufügen? </a>für Einzelheiten.

23voto

Mohammed Hossain Punkte 1259

Sie können .append(element) zur Liste hinzufügen, z.B.:

s1.append(i)

Was Sie gerade versuchen, ist der Zugriff auf ein Element ( s1[i] ), die es nicht gibt.

19voto

user2233706 Punkte 4562

Die akzeptierte Antwort hat einige Tücken. Zum Beispiel:

>>> a = [{}] * 3
>>> a
[{}, {}, {}]
>>> a[0]['hello'] = 5
>>> a
[{'hello': 5}, {'hello': 5}, {'hello': 5}]
>>> 

Jedes Wörterbuch bezieht sich also auf das gleiche Objekt. Dasselbe gilt, wenn Sie mit Arrays oder Objekten initialisieren.

Sie könnten stattdessen dies tun:

>>> b = [{} for i in range(0, 3)]
>>> b
[{}, {}, {}]
>>> b[0]['hello'] = 6
>>> b
[{'hello': 6}, {}, {}]
>>>

9voto

Karl Knechtel Punkte 55450

Wie kann ich eine leere Liste erstellen, die 10 Elemente enthalten kann?

Alle Listen können so viele Elemente enthalten, wie Sie möchten, und unterliegen nur der Begrenzung des verfügbaren Speichers. Die einzige "Größe" einer Liste, die zählt, ist die Anzahl der Elemente derzeit darin.

Das ergibt jedoch IndexError: list assignment index out of range . Warum?

Das erste Mal durch die Schleife, i ist gleich 0 . Daher versuchen wir xs[0] = 0 . Dies funktioniert nicht, da die Liste derzeit 0 Elemente enthält, so dass 0 ist kein gültiger Index.

Wir können die Indizierung nicht verwenden, um Listenelemente zu schreiben, die noch nicht vorhanden sind - wir können nur vorhandene überschreiben. Stattdessen sollten wir die .append Methode:

xs = list();
for i in range(0, 9):
   xs.append(i)

Das nächste Problem, das Sie feststellen werden, ist, dass Ihre Liste tatsächlich nur 9 Elemente hat, weil der Endpunkt von der range Funktion. (Als Randnotizen: [] funktioniert genauso gut wie list() ist das Semikolon überflüssig, und es wird nur ein Parameter benötigt für range wenn Sie von 0 .) Die Auseinandersetzung mit diesen Fragen gibt:

xs = []
for i in range(10):
    xs.append(i)

Dies ist jedoch immer noch zu kurz gesprungen. range ist nicht irgendein magisches Schlüsselwort, das Teil der Sprache ist, wie for (oder, sagen wir, def ) ist.

In 2.x, range ist eine Funktion die direkt die Liste zurückgibt, die wir bereits haben wollten:

xs = range(10) # 2.x specific!
# In 3.x, we don't get a list; we can do a lot of things with the
# result, but we can't e.g. append or replace elements.

In 3.x, range ist eine durchdacht konstruiert Klasse y range(10) erstellt eine Instanz. Um die gewünschte Liste zu erhalten, können wir sie einfach an die list Konstrukteur:

xs = list(range(10)) # correct in 3.x, redundant in 2.x

7voto

msonsona Punkte 1276

Eine einfache Möglichkeit zur Erstellung einer 2D-Matrix der Größe n mit verschachtelten Listenauffassungen:

m = [[None for _ in range(n)] for _ in range(n)]

6voto

Igor Rodriguez Punkte 1178

Ich bin etwas überrascht, dass der einfachste Weg, eine initialisierte Liste zu erstellen, in keiner der Antworten vorkommt. Verwenden Sie einfach einen Generator in der list Funktion:

list(range(9))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X