Eliminar cadenas vacías de una lista de cadenas

Resuelto zerodx asked hace 14 años • 13 respuestas

Quiero eliminar todas las cadenas vacías de una lista de cadenas en Python.

Mi idea se ve así:

while '' in str_list:
    str_list.remove('')

¿Existe alguna forma más pitónica de hacer esto?

zerodx avatar Oct 02 '10 18:10 zerodx
Aceptado

Yo usaría filter:

str_list = filter(None, str_list)
str_list = filter(bool, str_list)
str_list = filter(len, str_list)
str_list = filter(lambda item: item, str_list)

Python 3 devuelve un iterador de filter, por lo que debe incluirse en una llamada alist()

str_list = list(filter(None, str_list))
livibetter avatar Oct 02 '2010 11:10 livibetter

Usar una lista por comprensión es la forma más pitónica:

>>> strings = ["first", "", "second"]
>>> [x for x in strings if x]
['first', 'second']

Si la lista debe modificarse en el lugar, porque hay otras referencias que deben ver los datos actualizados, utilice una asignación de segmento:

strings[:] = [x for x in strings if x]
Ib33X avatar Oct 02 '2010 11:10 Ib33X

El filtro en realidad tiene una opción especial para esto:

filter(None, sequence)

Filtrará todos los elementos que se evalúen como Falso. No es necesario utilizar un elemento invocable real aquí, como bool, len, etc.

Es igual de rápido que map(bool, ...)

Ivo van der Wijk avatar Oct 02 '2010 12:10 Ivo van der Wijk