¿Cómo vaciar una lista?
Parece tan "sucio" vaciar una lista de esta manera:
while len(alist) > 0 : alist.pop()
¿Existe una manera clara de hacerlo?
En realidad, esto elimina el contenido de la lista, pero no reemplaza la etiqueta anterior con una nueva lista vacía:
del lst[:]
He aquí un ejemplo:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Para mayor claridad, la asignación de sectores tiene el mismo efecto:
lst[:] = []
También se puede utilizar para reducir una parte de la lista y al mismo tiempo reemplazar una parte (pero eso está fuera del alcance de la pregunta).
Tenga en cuenta que hacerlo lst = []
no vacía la lista, simplemente crea un nuevo objeto y lo vincula a la variable lst
, pero la lista anterior seguirá teniendo los mismos elementos y el efecto será evidente si tuviera otras vinculaciones de variables.
Si está ejecutando Python 3.3 o superior, puede usar el clear()
método de list
, que es paralelo a clear()
of dict
, set
y deque
otros tipos de contenedores mutables:
alist.clear() # removes all items from alist (equivalent to del alist[:])
Según la página de documentación vinculada, también se puede lograr lo mismo con alist *= 0
.
En resumen, hay cuatro formas equivalentes de borrar una lista in situ (¡muy al contrario del Zen de Python !):
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
Tu podrías intentar:
alist[:] = []
Lo que significa: empalmar la lista []
(0 elementos) en la ubicación [:]
(todos los índices de principio a fin)
El [:] es el operador de corte. Consulte esta pregunta para obtener más información.
Resulta que con Python 2.5.2, del l[:]
es un poco más lento que l[:] = []
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