Я написал функцию, которая будет работать лучше, чем встроенная функция split () (я знаю, что это не идиоматический python, но я приложил все усилия), поэтому, когда я передаю этот аргумент:
better_split("After the flood ... all the colors came out."," .")
Я ожидал такого результата:
['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
Однако, как ни странно, функция вызывает непонятное (для меня) поведение. Когда он достигает последних двух слов, он не подавляет больше '' и вместо того, чтобы добавить к списку результатов "cam" и "out", добавляет к нему "Выхода" и, таким образом, я получил это:
['After', 'the', 'flood', 'all', 'the', 'colors', 'came out']
Кто-то с большим опытом понимает, почему это происходит?
Заранее благодарю за любую помощь!
def better_split(text,markersString):
markers = []
splited = []
for e in markersString:
markers.append(e)
for character in text:
if character in markers:
point = text.find(character)
if text[:point] not in character:
word = text[:point]
splited.append(word)
while text[point] in markers and point+1 < len(text):
point = point + 1
text = text[point:]
print 'final splited = ', splited
better_split ("Это тест кода разделения строк!", ",! -")
better_split ("После потопа ... все цвета вышли.", ".")
split () С НЕСКОЛЬКИМИ РАЗДЕЛЕНИЯМИ
Если вы ищете split () с несколькими разделениями, смотрите:
Разделить строки с несколькими разделителями?
Лучший ответ без импорта, который я нашел, был следующим:
def my_split(s, seps):
res = [s]
for sep in seps:
s, res = res, []
for seq in s:
res += seq.split(sep)
return res