Як повідомляв 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
то це добре. продемонстрований цикл видалить порожні рядки, поки не буде більше порожніх рядків, а потім зупиниться. Я насправді навіть не дивився на питання (лише заголовок), але я відповів точно таким же циклом, як і можливість! Якщо ви не хочете використовувати розуміння чи фільтри задля пам’яті, це дуже пітонічне рішення.