Come riportato da Aziz Alto filter(None, lstr)
non rimuove le stringhe vuote con uno spazio ' '
ma se sei sicuro che lstr contenga solo stringhe puoi usarefilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Confronta i tempi sul mio 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
Rimane la soluzione più veloce per rimuovere ''
e svuotare le stringhe con uno spazio .' '
' '.join(lstr).split()
Come riportato in un commento, la situazione è diversa se le stringhe contengono spazi.
>>> 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']
Puoi vedere che filter(str.strip, lstr)
preserva le stringhe con degli spazi, ma ' '.join(lstr).split()
le suddividerà.
for x in list
stai ripetendo usando Se stai usando unwhile loop
allora va bene. il loop mostrato rimuoverà le stringhe vuote fino a quando non ci saranno più stringhe vuote e poi si fermerà. In realtà non avevo nemmeno guardato la domanda (solo il titolo) ma ho risposto con lo stesso loop esatto come una possibilità! Se non vuoi usare comprensioni o filtri per motivi di memoria, è una soluzione molto pitonica.