Как удалить пустую строку в списке?

Например, у меня есть предложение

"He is so .... cool!"

Затем я удаляю все знаки препинания и делаю это в списке.

["He", "is", "so", "", "cool"]

Как удалить или игнорировать пустую строку?

Ответ 1

Вы можете использовать filter с None как ключевую функцию, которая отфильтровывает все элементы, которые False ish ( включая пустые строки)

>>> lst = ["He", "is", "so", "", "cool"]
>>> filter(None, lst)
['He', 'is', 'so', 'cool']

Обратите внимание, что filter возвращает список в Python 2, но генератор в Python 3. Вам нужно будет преобразовать его в список в Python 3 или использовать решение для понимания списка.

False значения ish включают:

False
None
0
''
[]
()
# and all other empty containers

Ответ 2

Вы можете отфильтровать его так:

orig = ["He", "is", "so", "", "cool"]
result = [x for x in orig if x]

Или вы можете использовать filter. В python 3 filter возвращает генератор, таким образом list() превращает его в список. Это также работает и в python 2.7

result = list(filter(None, orig))

Ответ 3

Вы можете использовать понимание списка:

cleaned = [x for x in your_list if x]

Хотя я бы использовал regex для извлечения слов:

>>> import re
>>> sentence = 'This is some cool sentence with,    spaces'
>>> re.findall(r'(\w+)', sentence)
['This', 'is', 'some', 'cool', 'sentence', 'with', 'spaces']

Ответ 4

Я дам вам ответ на вопрос, который вы должны задать, - как вообще избежать пустой строки. Я предполагаю, что вы делаете что-то подобное, чтобы получить свой список:

>>> "He is so .... cool!".replace(".", "").split(" ")
['He', 'is', 'so', '', 'cool!']

Дело в том, что вы используете .split(" ") для разделения на пробелы. Однако, если вы не укажете аргумент split, это произойдет:

>>> "He is so .... cool!".replace(".", "").split()
['He', 'is', 'so', 'cool!']

Введите документы:

Если sep не указан или None, применяется другой алгоритм разделения: пробеги последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или конце, если строка имеет ведущую или конечную пробел.

Так что вам действительно не нужно беспокоиться о других ответах (кроме Blender, это совершенно другой подход), потому что split может выполнить эту работу за вас!

Ответ 5

>>> from string import punctuation
>>> text = "He is so .... cool!"
>>> [w.strip(punctuation) for w in text.split() if w.strip(punctuation)]
['He', 'is', 'so', 'cool']

Ответ 6

Python 3 возвращает iterator из filter, поэтому его следует включить в вызов list()

str_list = list(filter(None, str_list)) # fastest

Ответ 7

Вы можете легко отфильтровать пустые строки, используя понимание списка:

x = ["He", "is", "so", "", "cool"]
x = [str for str in x if str]
>>> ['He', 'is', 'so', 'cool']

Ответ 8

Вы можете сделать это с помощью filter.

a = ["He", "is", "so", "", "cool"]
filter(lambda s: len(s) > 0, a)