372 Stimmen

Wie leert man eine Liste?

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?

587voto

fortran Punkte 70744

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.

220voto

Eugene Yarmash Punkte 130008

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 !):

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0

64voto

Adam Batkin Punkte 49295

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.

31voto

Dan D. Punkte 70371

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

6voto

Ivan Hoffmann Punkte 129
lst *= 0

hat die gleiche Wirkung wie

lst[:] = []

Es ist ein wenig einfacher und vielleicht leichter zu merken. Abgesehen davon gibt es nicht viel zu sagen

Der Wirkungsgrad scheint in etwa gleich zu sein

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