Например, у меня есть предложение
"He is so .... cool!"
Затем я удаляю все знаки препинания и делаю это в списке.
["He", "is", "so", "", "cool"]
Как удалить или игнорировать пустую строку?
Например, у меня есть предложение
"He is so .... cool!"
Затем я удаляю все знаки препинания и делаю это в списке.
["He", "is", "so", "", "cool"]
Как удалить или игнорировать пустую строку?
Вы можете использовать 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
Вы можете отфильтровать его так:
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))
Вы можете использовать понимание списка:
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']
Я дам вам ответ на вопрос, который вы должны задать, - как вообще избежать пустой строки. Я предполагаю, что вы делаете что-то подобное, чтобы получить свой список:
>>> "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 может выполнить эту работу за вас!
>>> 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']
Python 3 возвращает iterator
из filter
, поэтому его следует включить в вызов list()
str_list = list(filter(None, str_list)) # fastest
Вы можете легко отфильтровать пустые строки, используя понимание списка:
x = ["He", "is", "so", "", "cool"]
x = [str for str in x if str]
>>> ['He', 'is', 'so', 'cool']
Вы можете сделать это с помощью filter
.
a = ["He", "is", "so", "", "cool"]
filter(lambda s: len(s) > 0, a)