Erstellen Sie eine leere Liste mit einer bestimmten Größe in Python
Lesezeit: 7 Minuten
Ronaldinho Programmieren lernen
Wie erstelle ich eine leere Liste, die 10 Elemente enthalten kann?
Danach möchte ich dieser Liste Werte zuweisen. Zum Beispiel:
xs = list()
for i in range(0, 9):
xs[i] = i
Allerdings gibt das IndexError: list assignment index out of range. Wieso den?
Listen in Python haben keine festgelegte Kapazität, aber es ist nicht möglich, Elementen 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. Allerdings stoßen die meisten Anfänger auf dieses Problem Ich möchte wirklich nur eine Liste erstellen, indem ich ihr Elemente hinzufüge. Das sollte mit der erfolgen .append Methode, obwohl es oft problemspezifische Möglichkeiten gibt, die Liste direkter zu erstellen. Weitere Informationen finden Sie unter Warum gibt dieser iterative Listenerweiterungscode IndexError aus: Listenzuweisungsindex außerhalb des gültigen Bereichs? Wie kann ich einer Liste wiederholt Elemente hinzufügen? für Details.
mögliches Duplikat von Initialisieren einer Liste mit einer bekannten Anzahl von Elementen in Python
– lumbrisch
3. Januar 2015 um 0:01 Uhr
Eine „leere Liste“ ([]) hat per Definition null Elemente. Was Sie anscheinend wollen, ist eine Liste falscher Werte wie None, 0oder ''.
– dan04
29. November 2016 um 22:36 Uhr
Zum Generieren einer Liste aus 0 zu 9 solltest du eigentlich verwenden for i in range(0, 10)was bedeutet for (int i = 0, i < 10, i++).
– Kalt
2. Februar 2017 um 14:29 Uhr
s1 = liste(); für i in range(0,9): s1.append(i) print (s1)
– Tanmoy
3. April um 6:21
Sie können eine Liste der Größe N = 10 (sagen wir) erstellen, indem Sie Folgendes verwenden: list1 = np.empty (10)
– Tanmoy
3. April um 6:22
varunl
Sie können nicht einer Liste wie z xs[i] = valuees sei denn, die Liste ist bereits mit mindestens initialisiert i+1 Elemente. Verwenden Sie stattdessen xs.append(value) um Elemente am Ende der Liste hinzuzufügen. (Obwohl Sie die Zuordnungsnotation verwenden könnten, wenn Sie ein Wörterbuch anstelle einer Liste verwenden würden.)
Verwenden einer Funktion zum Erstellen einer Liste:
>>> def display():
... xs = []
... for i in range(9): # This is just to tell you how to create a list.
... xs.append(i)
... return xs
...
>>> print display()
[0, 1, 2, 3, 4, 5, 6, 7, 8]
Listenverständnis (Verwenden Sie die Quadrate, denn für die Reichweite müssen Sie das alles nicht tun, Sie können einfach zurückkehren range(0,9) ):
>>> def display():
... return [x**2 for x in range(9)]
...
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
Was meinst du mit “Sie können nicht einer Liste wie lst zuweisen[i] = irgendetwas” – natürlich können Sie! Was Sie nicht tun können, ist die Zuweisung an ein nicht vorhandenes Element über die aktuelle Listenlänge hinaus
– Sergej
23. April 2018 um 23:28 Uhr
“es sei denn, die Liste ist bereits mit mindestens i+1 Elementen initialisiert”….
– HerrR
30. Oktober 2018 um 13:30 Uhr
du kannst das: a = [0 for _ in range(10)]
– Kamiar
19. Dezember 2018 um 21:55 Uhr
Dies funktioniert nicht, wenn Sie versuchen, eine Matrix/2D-Liste mit fester Größe zu erstellen. Siehe die Antworten von James L. und user2233706.
– aklingam
27. Mai 2021 um 8:44 Uhr
VORSICHT dies erstellt eine Liste von Zeiger. Wenn Sie dies mit einem beliebigen nicht primitiven Objekt tun, wird eine Liste von Zeigern erstellt zum selben Objekt. Das bedeutet, dass Sie wissen sollten, was Sie tun, wenn Sie None durch etwas anderes ersetzen.
– Gülzar
29. Januar um 18:39 Uhr
Oscar López
Versuchen Sie stattdessen Folgendes:
lst = [None] * 10
Das Obige erstellt eine Liste der Größe 10, auf die jede Position initialisiert wird None. Danach können Sie Elemente hinzufügen:
lst = [None] * 10
for i in range(10):
lst[i] = i
Zugegeben, das ist nicht die pythonische Art, Dinge zu tun. Mach das besser:
lst = []
for i in range(10):
lst.append(i)
Oder noch einfacherin Python 2.x können Sie dies tun, um eine Liste mit Werten von 0 bis 9 zu initialisieren:
lst = range(10)
Und in Python 3.x:
lst = list(range(10))
Das andere Tolle daran ist, dass Sie eine Liste mit Standardwerten initialisieren können. lst = [''] * 10 oder lst = [0] * 10
– Anthony Manning-Franklin
14. September 2016 um 3:47 Uhr
Eine Variante des Verständnisbeispiels. Wenn alle Elemente im Array bei der Initialisierung leer sein müssen, verwenden Sie: arr = [None for _ in range(10)].
– Diakon
31. März 2017 um 18:23 Uhr
Dieses Format ist lst = list(range(10)) sieht nett aus. Wie die gleiche Länge in Java int [] arr = new int[10]
– ChuckZHB
1. Juli 2020 um 14:54 Uhr
Warum ist dieses erste Beispiel nicht die “pythonische” Art, Dinge zu tun?
– TwistedPixel
16. November 2021 um 20:31 Uhr
@twistedpixel, weil Sie den Index nicht verwenden sollen, um auf die Elemente in einer for-Schleife zuzugreifen es sei denn du brauchst es wirklich. Eine einfache for element in theList wird in den meisten Fällen bevorzugt.
– Oscar López
16. November 2021 um 20:32 Uhr
Jakob L.
varunls derzeit akzeptierte Antwort
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
Funktioniert gut für Nicht-Referenztypen wie Zahlen. Wenn Sie eine Liste von Listen erstellen möchten, werden Sie leider auf Verweisfehler stoßen. 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, die jede Position mit einer anderen Objektreferenz initialisiert.
def init_list_of_objects(size):
list_of_objects = list()
for i in range(0,size):
list_of_objects.append( list() ) #different object reference each time
return list_of_objects
>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>>
Es gibt wahrscheinlich eine standardmäßige, integrierte Python-Methode, um dies zu tun (anstatt eine Funktion zu schreiben), aber ich bin mir nicht sicher, was es ist. Gerne korrigiert!
Bearbeiten: Es ist [ [] for _ in range(10)]
Beispiel :
>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]
Ich habe das mit gehört append ist Listenverständnissen sehr oft unterlegen. Sie können Ihre Liste mit Listen erstellen über [ [] for _ in range(10)].
– M.Herzkamp
4. August 2016 um 11:34 Uhr
Upvoted, weil ich wütend wurde, weil ich ein mehrdimensionales Array mit denselben Daten mehrmals wiederholt hatte und nicht herausfinden konnte, was passierte, bevor ich endlich diese Antwort fand. ^^ Ich verstehe nicht, warum es hier so niedrig ist.
– Bregalad
30. Dezember 2017 um 17:43 Uhr
Es gibt zwei “schnelle” Methoden:
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]
Anscheinend [None]*x ist schneller:
>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605
Aber wenn Sie mit einem Bereich einverstanden sind (z [0,1,2,3,...,x-1]), dann range(x) vielleicht am schnellsten:
Du kannst .append(element) zur Liste, zB: s1.append(i). Was Sie gerade versuchen, ist der Zugriff auf ein Element (s1[i]) die es nicht gibt.
Verneigung
Ich bin überrascht, dass niemand diesen einfachen Ansatz zum Erstellen einer Liste leerer Listen vorschlägt. Dies ist ein alter Thread, aber nur der Vollständigkeit halber hinzugefügt. Dadurch wird eine Liste mit 10 leeren Listen erstellt
x = [[] for i in range(10)]
Benutzer2233706
Die akzeptierte Antwort hat einige Fallstricke. Zum Beispiel:
>>> a = [{}] * 3
>>> a
[{}, {}, {}]
>>> a[0]['hello'] = 5
>>> a
[{'hello': 5}, {'hello': 5}, {'hello': 5}]
>>>
Jedes Wörterbuch bezieht sich also auf dasselbe Objekt. Gleiches gilt, wenn Sie mit Arrays oder Objekten initialisieren.
Sie könnten stattdessen Folgendes tun:
>>> b = [{} for i in range(0, 3)]
>>> b
[{}, {}, {}]
>>> b[0]['hello'] = 6
>>> b
[{'hello': 6}, {}, {}]
>>>
Die obige Methode funktioniert gut für die ‘einzelne’ Schlüsselwerteingabe für jedes ‘Dikt’ innerhalb der Liste. Wir können kein weiteres Paar zu ‘b hinzufügen[0]’. Daher ist es immer besser, die Methode „.append“ oder „.extend“ zu verwenden, anstatt einfach die Werte zuzuweisen. Und es gilt für jede Kombination wie Tupel (Liste), Liste (Liste) usw.
– Akshay Gaikwad
19. März 2021 um 18:37 Uhr
11386100cookie-checkErstellen Sie eine leere Liste mit einer bestimmten Größe in Pythonyes
mögliches Duplikat von Initialisieren einer Liste mit einer bekannten Anzahl von Elementen in Python
– lumbrisch
3. Januar 2015 um 0:01 Uhr
Eine „leere Liste“ (
[]
) hat per Definition null Elemente. Was Sie anscheinend wollen, ist eine Liste falscher Werte wieNone
,0
oder''
.– dan04
29. November 2016 um 22:36 Uhr
Zum Generieren einer Liste aus
0
zu9
solltest du eigentlich verwendenfor i in range(0, 10)
was bedeutetfor (int i = 0, i < 10, i++)
.– Kalt
2. Februar 2017 um 14:29 Uhr
s1 = liste(); für i in range(0,9): s1.append(i) print (s1)
– Tanmoy
3. April um 6:21
Sie können eine Liste der Größe N = 10 (sagen wir) erstellen, indem Sie Folgendes verwenden: list1 = np.empty (10)
– Tanmoy
3. April um 6:22