Подтвердить что ты не робот

Удалить строки, содержащие только пробелы из списка

Как удалить пустые строки из списка? Я пробовал вот так:

starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']
output = filter(bool, starring)

Выход я хочу:

['Vashu Bhagnani', 'Khemchand Bhagnani',  'Jacky Bhagnani',  'Prashant Shah']

Но output заканчивается тем же, что и input. Какую правильную функцию передать на filter?

4b9b3361

Ответ 1

Только пустая строка оценивается как False, поэтому вам нужно использовать strip() для удаления любых пробелов, и мы можем тогда полагаться на непустые строки, которые оцениваются как истинные.

>>> starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']                                      
>>> starring = filter(lambda name: name.strip(), starring)
>>> starring
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']

Хотя понимание списка может быть проще:

>>> [name for name in starring if name.strip()]
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']

Ответ 2

Вы можете удалить конечные и ведущие пробелы, что приведет к пустой строке, если она содержит только те.

Учет списка:

l = [x for x in l if x.strip()]

С filter и operator.methodcaller [docs]:

l = filter(operator.methodcaller('strip'), l)

или проще:

l = filter(str.strip, l)

operator.methodcaller будет единственным способом, если вы хотите передать дополнительные аргументы методу.

Ответ 3

s = ['Vashu Bhagnani', 'Khemchand Bhagnani', '', 'Jacky Bhagnani', '', 'Prashant Shah', '']
[a for a in s if len(a) > 0]