Как сообщает Aziz, Alto filter(None, lstr)
не удаляет пустые строки с пробелом, ' '
но если вы уверены, что lstr содержит только строку, вы можете использоватьfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Сравните время на моем компьютере
>>> 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
Самое быстрое решение для удаления ''
и очистки строк с пробелом ' '
остается ' '.join(lstr).split()
.
Как сообщается в комментарии, ситуация отличается, если ваши строки содержат пробелы.
>>> 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']
Вы можете видеть, что filter(str.strip, lstr)
сохраняются строки с пробелами, но ' '.join(lstr).split()
разбиваются эти строки.
for x in list
Если вы используете,while loop
то это нормально. Показанный цикл удалит пустые строки, пока не останется больше пустых строк, а затем остановится. На самом деле я даже не посмотрел на вопрос (только название), но я ответил точно так же, как это возможно! Если вы не хотите использовать понимание или фильтры ради памяти, это очень питонное решение.