Es wirkt so "schmutzig", eine Liste auf diese Weise zu leeren:
while len(alist) > 0 : alist.pop()
Gibt es eine klare Möglichkeit, dies zu tun?
Es wirkt so "schmutzig", eine Liste auf diese Weise zu leeren:
while len(alist) > 0 : alist.pop()
Gibt es eine klare Möglichkeit, dies zu tun?
Dadurch wird zwar der Inhalt der Liste entfernt, aber das alte Etikett wird nicht durch eine neue leere Liste ersetzt:
del lst[:]
Hier ist ein Beispiel:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Der Vollständigkeit halber sei erwähnt, dass die Slice-Zuweisung den gleichen Effekt hat:
lst[:] = []
Es kann auch verwendet werden, um einen Teil der Liste zu verkleinern und gleichzeitig einen Teil zu ersetzen (aber das gehört nicht in den Rahmen dieser Frage).
Beachten Sie, dass die lst = []
leert die Liste nicht, sondern erstellt lediglich ein neues Objekt und bindet es an die Variable lst
aber die alte Liste wird immer noch die gleichen Elemente haben, und die Wirkung wird offensichtlich sein, wenn sie andere Variablenbindungen hatte.
Wenn Sie Python 3.3 oder besser verwenden, können Sie die clear()
Methode der list
, die parallel zu clear()
de dict
, set
, deque
und andere veränderbare Containertypen:
alist.clear() # removes all items from alist (equivalent to del alist[:])
Wie auf der verlinkten Dokumentationsseite zu lesen ist, kann dasselbe auch mit alist *= 0
.
Zusammenfassend kann man sagen, dass es vier gleichwertige Möglichkeiten gibt, eine Liste an Ort und Stelle zu löschen (ganz im Gegensatz zur Zen der Python !):
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
Sie könnten es versuchen:
alist[:] = []
Das bedeutet: Die Liste einfügen []
(0 Elemente) an der Stelle [:]
(alle Indizes von Anfang bis Ende)
Das [:] ist der Slice-Operator. Siehe diese Frage für weitere Informationen.
Es stellt sich heraus, dass mit python 2.5.2, del l[:]
ist etwas langsamer als l[:] = []
um 1,1 usec.
$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
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.