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.

5voto

Gulzar Punkte 16632

Eine weitere Option ist die Verwendung von Numpy für Arrays (Zeiger) fester Größe:

> pip install numpy

import numpy as np

a = np.empty(10, dtype=np.object)
a[1] = 2
a[5] = "john"
a[3] = []

Wenn Sie nur Zahlen benötigen, können Sie mit numpy arbeiten:

a = np.arange(10)

2voto

Tanmoy Punkte 739

Eine Liste ist immer "iterierbar", und Sie können ihr immer neue Elemente hinzufügen:

  1. einfügen: list.insert(indexPosition, value)
  2. anhängen: list.append(value)
  3. erweitern: list.extend(value)

In Ihrem Fall hatten Sie eine leere Liste der Länge 0 instanziiert. Wenn Sie also versuchen, der Liste mit Hilfe des Listenindex (i) einen Wert hinzuzufügen, bezieht sich dieser auf eine Stelle, die nicht existiert. Daher erhalten Sie die Fehlermeldung "IndexError: list assignment index out of range".

Sie können stattdessen Folgendes versuchen:

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

print (s1)

Um eine Liste der Größe 10 (sagen wir mal) zu erstellen, können Sie zunächst ein leeres Array erstellen, wie np.empty(10) und konvertieren sie dann in eine Liste mit arrayName.tolist() . Alternativ können Sie sie auch verketten.

            **`np.empty(10).tolist()`**

2voto

Amit Prafulla Punkte 361

Hier ist mein Code für 2D-Liste in Python, die Anzahl der Zeilen aus der Eingabe lesen würde:

empty = []
row = int(input())

for i in range(row):
    temp = list(map(int, input().split()))
    empty.append(temp)

for i in empty:
    for j in i:
        print(j, end=' ')
    print('')

0voto

Sanjay Krishna Punkte 157

Ich bin bei der Suche nach einem ähnlichen Problem auf diese SO-Frage gestoßen. Ich musste ein 2D-Array erstellen und dann einige Elemente jeder Liste (im 2D-Array) durch Elemente aus einem Diktat ersetzen. Ich stieß dann auf este SO Frage, die mir geholfen hat, vielleicht wird dies anderen Anfängern helfen, sich zurechtzufinden. Der entscheidende Trick war, das 2D-Array als Numpy-Array zu initialisieren und dann mit array[i,j] anstelle von array[i][j] .

Zur Veranschaulichung ist dies das Codestück, bei dem ich diese :

nd_array = []
for i in range(30):
    nd_array.append(np.zeros(shape = (32,1)))
new_array = []
for i in range(len(lines)):
    new_array.append(nd_array)
new_array = np.asarray(new_array)
for i in range(len(lines)):
    splits = lines[i].split(' ')
    for j in range(len(splits)):
        #print(new_array[i][j])
        new_array[i,j] = final_embeddings[dictionary[str(splits[j])]-1].reshape(32,1)

Ich weiß, dass wir Listenverständnis verwenden können, aber der Einfachheit halber verwende ich eine verschachtelte for-Schleife. Ich hoffe, dies hilft anderen, die auf diesen Beitrag stoßen.

0voto

DaftVader Punkte 87

Technisch gesehen keine Liste, aber von der Funktionalität her ähnlich wie eine Liste und mit einer festen Länge

from collections import deque
my_deque_size_10 = deque(maxlen=10)

Wenn sie voll ist, d. h. 10 Elemente enthält, führt das Hinzufügen eines weiteren Elements dazu, dass das Element @index 0 verworfen wird. FIFO..aber man kann auch in beide Richtungen anhängen. Verwendet in sagen wir

  • einen gleitenden Durchschnitt der Statistiken
  • eine Liste durchpipen, d.h. ein Fenster über eine Liste schieben, bis Sie eine Übereinstimmung mit einem anderen Deque-Objekt erhalten.

Wenn Sie eine Liste benötigen, dann verwenden Sie, wenn sie voll ist, einfach list(deque object)

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