Erstellen Sie eine leere Liste mit einer bestimmten Größe in Python

Lesezeit: 7 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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.)

Erstellen einer leeren Liste:

>>> xs = [None] * 10
>>> xs
[None, None, None, None, None, None, None, None, None, None]

Einem bestehenden Element der obigen Liste einen Wert zuweisen:

>>> xs[1] = 5
>>> xs
[None, 5, None, None, None, None, None, None, None, None]

Denken Sie daran, dass so etwas wie xs[15] = 5 würde immer noch fehlschlagen, da unsere Liste nur 10 Elemente hat.

range(x) erstellt eine Liste aus [0, 1, 2, … x-1]

# 2.X only. Use list(range(10)) in 3.X.
>>> xs = range(10)
>>> xs
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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


Benutzer-Avatar
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

Benutzer-Avatar
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:

>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>> 

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:

>>> timeit("range(100)",number=10000)
0.012513160705566406

Benutzer-Avatar
Mohammed Hossain

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.

Benutzer-Avatar
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)]

Benutzer-Avatar
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

1138610cookie-checkErstellen Sie eine leere Liste mit einer bestimmten Größe in Python

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy