Почему при применении функции .split() появляется лишний элемент в списке?

День добрый! Подскажите почему при применении функции .split() появляется лишний элемент в списке?

Код:

x = "Где это? Когда это? Кто это?"
z = x.split("?")
print(z)

Результат:

['Где это', ' Когда это', ' Кто это', '']

Заранее спасибо за ответ!


Ответы (2 шт):

Автор решения: GrAnd

Никакого "лишнего" элемента нет. Метод split() делит строку по разделителю, т.е. берёт кусок строки и слева, и справа. В вашем конкретном случае справа от последнего знака вопроса находится пустая строка.

Ещё более простая ситуация:

"?".split("?")

Вернёт:

['', '']
→ Ссылка
Автор решения: Zhihar

потому что после ? в конце строки не идет никакого символа, однако split разбивает строку на ДО разделителя и ПОСЛЕ разделителя - а после разделителя ничего нет, вот и получается строка нулевого размера

если сделать:

print("??".split("?"))

но получите 3 пустые строки - ['', '', ''], потому что

"[тут пусто]?[тут пусто]?[тут пусто]"

чтобы избавиться от этого можно сделать так:

res = [block for block in text.split('?') if len(block) > 0]

конечно останутся пробелы/табуляции и т.д., но чтобы без них выделить текст, можно сделать так:

res = [block.strip() for block in text.split('?') if len(block.strip()) > 0]
→ Ссылка