Почему при применении функции .split() появляется лишний элемент в списке?
День добрый! Подскажите почему при применении функции .split() появляется лишний элемент в списке?
Код:
x = "Где это? Когда это? Кто это?"
z = x.split("?")
print(z)
Результат:
['Где это', ' Когда это', ' Кто это', '']
Заранее спасибо за ответ!
Ответы (2 шт):
Никакого "лишнего" элемента нет. Метод split() делит строку по разделителю, т.е. берёт кусок строки и слева, и справа. В вашем конкретном случае справа от последнего знака вопроса находится пустая строка.
Ещё более простая ситуация:
"?".split("?")
Вернёт:
['', '']
потому что после ? в конце строки не идет никакого символа, однако 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]