2014-11-02 3 views
0

Эта функция принимает два аргумента, текст и разделители, которые являются обеими строками, и возвращает список непустых, непустых строк из текста, определяемый путем разделения текста на любом из разделителей. разделители - это строка односимвольных разделителей.Создать функцию для разделения на разделителях

Вот пример:

def split_on_separators(text, separators) 
>>>split_on_separators("Hooray! Finally, we're done.", "!,") 
['Hooray', ' Finally', " we're done."] 

Это то, что я до сих пор:

location_of_sep = [] 
    result = [] 
    for i in range(len(text)): 
     if original[i] in separators: 
      location_of_sep.append(i) 

я застрял после этой части. Теперь, когда у меня есть местоположение разделителя, как можно добавить его в результат списка. Я попробовал следующее:

location_of_sep= [6, 15] #location of separator for the example given above 
for j in location_of_sep: 
    result.append(text[0:j]) 

Это не работает, потому что он не получает текст между двумя разделителями. Возможно, я об этом подумал. Любая помощь будет оценена

ответ

4

Как об использовании re.split:

>>> import re 
>>> re.split("[!,]", "Hooray! Finally, we're done.") 
['Hooray', ' Finally', " we're done."] 

Если вы не хотите использовать регулярное выражение:

Использование zip, вы можете сделать пар.

>>> text = "Hooray! Finally, we're done." 
>>> location_of_sep = [6, 15] 

>>> zip([-1] + location_of_sep, location_of_sep + [None]) 
[(-1, 6), (6, 15), (15, None)] 

>>> [(i+1,j) for i, j in zip([-1] + location_of_sep, location_of_sep + [None])] 
[(0, 6), (7, 15), (16, None)] 

>>> [text[i+1:j] for i, j in zip([-1] + location_of_sep, location_of_sep + [None])] 
['Hooray', ' Finally', " we're done."] 
+0

+1 для рекомендации re.split и ответа на вопрос для загрузки –

Смежные вопросы