Según lo informado por Aziz Alto filter(None, lstr)
, no elimina las cadenas vacías con un espacio, ' '
pero si está seguro de que lstr contiene solo cadenas, puede usarfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Comparar el tiempo en mi pc
>>> from timeit import timeit
>>> timeit('" ".join(lstr).split()', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
3.356455087661743
>>> timeit('filter(str.strip, lstr)', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
5.276503801345825
La solución más rápida para eliminar ''
y vaciar cadenas con un espacio ' '
permanece' '.join(lstr).split()
.
Como se informó en un comentario, la situación es diferente si sus cadenas contienen espacios.
>>> lstr = ['hello', '', ' ', 'world', ' ', 'see you']
>>> lstr
['hello', '', ' ', 'world', ' ', 'see you']
>>> ' '.join(lstr).split()
['hello', 'world', 'see', 'you']
>>> filter(str.strip, lstr)
['hello', 'world', 'see you']
Puede ver que filter(str.strip, lstr)
preserva las cadenas con espacios, pero ' '.join(lstr).split()
dividirá estas cadenas.
for x in list
si está usando una,while loop
entonces está bien. el bucle demostrado eliminará cadenas vacías hasta que no haya más cadenas vacías y luego se detendrá. En realidad, ni siquiera había mirado la pregunta (solo el título), ¡pero respondí exactamente con el mismo bucle como una posibilidad! Si no desea utilizar comprensiones o filtros por el bien de la memoria, es una solución muy pitónica.