Ich habe eine Liste:
list1=[]
Die Länge der Liste ist unbestimmt, daher versuche ich, Objekte wie folgt an das Ende von Liste1 anzuhängen:
for i in range(0, n):
list1=list1.append([i])
Meine Ausgabe gibt jedoch weiterhin den folgenden Fehler aus: AttributeError: Das Objekt 'NoneType' hat kein Attribut 'append'.
Liegt das daran, dass list1 als leere Liste beginnt? Wie behebe ich diesen Fehler?
Antworten:
append
ändert tatsächlich die Liste. Außerdem wird ein Element und keine Liste benötigt. Alles was Sie brauchen istfor i in range(n): list1.append(i)
(Beachten Sie übrigens, dass Sie
range(n)
in diesem Fall verwenden können.)Ich gehe davon aus, dass Ihre tatsächliche Verwendung komplizierter ist, aber Sie können möglicherweise ein Listenverständnis verwenden, das dafür pythonischer ist:
list1 = [i for i in range(n)]
In diesem Fall erstellt Python 2.x
range(n)
tatsächlich die Liste, die Sie bereits möchten, obwohl Sie dies in Python 3.x benötigenlist(range(n))
.quelle
append
wird zur äußersten Listea[-1].append(3)
hinzugefügt , aber Sie können eine verschachtelte Liste anhängen, indem Sie sie indizieren:3
an die letzte Unterliste von anhängena
.Sie benötigen den Zuweisungsoperator nicht. Anhängen gibt keine zurück.
quelle
append
append
Gibt None zurück, sodass Sie bei der zweiten Iteration die Methode NoneType aufrufen. Entfernen Sie einfach die Zuordnung:for i in range(0, n): list1.append([i])
quelle
Mikola hat die richtige Antwort, aber etwas mehr Erklärung. Es wird das erste Mal ausgeführt, aber da das Anhängen
None
nach der ersten Iteration der for-Schleife zurückgegeben wird, wird Ihre Zuweisunglist1
gleichNone
und daher wird der Fehler bei der zweiten Iteration ausgelöst.quelle
Ich persönlich bevorzuge den
+
Betreiber alsappend
:for i in range(0, n): list1 += [[i]]
Dies erstellt jedoch jedes Mal eine neue Liste und ist daher möglicherweise nicht die beste, wenn die Leistung kritisch ist.
quelle
Beachten Sie, dass Sie auch Einfügen verwenden können, um die Nummer an der gewünschten Stelle in der Liste zu platzieren:
initList = [1,2,3,4,5] initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]
Beachten Sie auch, dass Sie in Python immer eine Listenlänge mit der Methode len () erhalten können.
quelle
Wie Mikola sagte,
append()
gibt eine Leere zurück, sodass jede Iteration, die Sie list1 auf einen Nichttyp setzen, weil append einen Nichttyp zurückgibt. Bei der nächsten Iteration ist list1 null, sodass Sie versuchen, die Append-Methode einer Null aufzurufen. Nullen haben keine Methoden, daher Ihr Fehler.quelle
Verwenden Sie my_list.append (...) und verwenden Sie keine andere Liste, um sie als Liste anzuhängen.
quelle
my_list
Variable).