¿Cómo vaciar una lista?

Resuelto DrFalk3n asked hace 15 años • 7 respuestas

Parece tan "sucio" vaciar una lista de esta manera:

while len(alist) > 0 : alist.pop()

¿Existe una manera clara de hacerlo?

DrFalk3n avatar Sep 09 '09 23:09 DrFalk3n
Aceptado

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.

fortran avatar Sep 09 '2009 16:09 fortran

Si está ejecutando Python 3.3 o superior, puede usar el clear()método de list, que es paralelo a clear()of dict, sety dequeotros 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 !):

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0
Eugene Yarmash avatar May 06 '2015 20:05 Eugene Yarmash

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.

Adam Batkin avatar Sep 09 '2009 16:09 Adam Batkin

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
Dan D. avatar Nov 23 '2011 09:11 Dan D.