Eliminar cadenas vacías de una lista de cadenas
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?
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))
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]
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, ...)