Según ha informado Aziz Altofilter(None, lstr)
no elimina las cadenas vacías con un espacio ' '
pero si está seguro de LSTR sólo contiene cadena que puede utilizar filter(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 cadenas vacías con un espacio ' '
sigue siendo ' '.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']
Se puede ver que filter(str.strip, lstr)
preservar cadenas con espacios en él, pero ' '.join(lstr).split()
se repartirán esta cuerdas.
usted debería * * Nunca modificar la lista que está interactuando sobre. Además, su bucle solo eliminará desde el inicio de su lista y se detendrá tan pronto como se haya activado una cadena que no esté vacía. –
@ Ivo, ninguna de esas afirmaciones es verdadera. Nunca debe modificar una lista que itere usando 'for x in list' Si está utilizando' while loop', entonces está bien. el ciclo demostrado eliminará las cadenas vacías hasta que no haya más cadenas vacías y luego se detendrá. De hecho, ni siquiera había mirado la pregunta (solo el título) pero respondí con el mismo ciclo como una posibilidad. Si no quiere usar comprensiones o filtros por el bien de la memoria, es una solución muy pitonica. – aaronasterling
@ AaronMcSmooth Tienes razón, hice suposiciones erróneas sobre el ciclo porque no me veía lo suficientemente bien. My bad –