.split дает пустые элементы в списке при объединении методов .replace

Я новичок в Python и работаю над тем, чтобы взять абзац и разбить количество слов внутри каждого предложения, а затем получить среднее количество слов в предложении. Прежде чем я смог сделать эту математику, я понял, что мне нужно очистить данные, чтобы иметь возможность проникать в отдельные слова для каждого предложения.

Я .replace() методы .replace() абзаца, чтобы получить отдельные предложения, и когда я .split() на "." В конце я получаю дополнительный пустой строковый элемент, в котором мое предложение считается 16 вместо 15 (правильный результат).

Спасибо за помощь!!

Я нашел несколько ссылок, которые описывают обычные проблемы split пробелов и новые опции split строк, но это тоже не помогает, так как это не проблема новой строки?

 def get_average_sentence_length(text): sentences_in_text = [] text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".") sentences_in_text = text return sentences_in_text print(get_average_sentence_length(TEXT)) 

Вы можете увидеть последний элемент ''. Я сократил остальную часть параграфа ради краткости.

['...,' Я не могу дождаться, чтобы насладиться игрой на совершенно новой сойке ',' Это, безусловно, великое время для изучения жизни и любви ',' ']

Всего 3 ответа


split обрабатывает завершающий разделитель как предшествующее пустому полю:

>>> text = "foo.bar."
>>> text.split(".")
['foo', 'bar', '']

Если вы хотите избежать этого, удалите конечный разделитель:

>>> text.rstrip(".").split(".")
['foo', 'bar']

sentences_in_text = text

Замените это на:

sentences_in_text = [t for t in text if t]

Так что вы отфильтровываете эти "" пустые строки


Вы можете отфильтровать, прежде чем вернуть результат. Как это

def get_average_sentence_length(text):
    sentences_in_text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".")
    return list(filter(None, sentences_in_text))

print(get_average_sentence_length('some? text. hello!'))

Есть идеи?

10000