Несколько дней назад я прошу некоторую функцию, которая извлекает повторяющийся мотив из некоторой строки (Here the link to the ask). Пользователь @Kasramvd опубликовал хорошую функцию на основе регулярных выражений:Как сбросить эту функцию?
import re
def finder(st,past_ind=0,l=[]):
m=re.search(r'(.+)\1+',st)
if m:
i,j=m.span()
sub=st[i:j]
ind = (sub+sub).find(sub, 1)
sub=sub[:ind]
if len(sub)>1:
l.append([sub,(i+past_ind+1,j+past_ind+1)])
past_ind+=j
return finder(st[j:],past_ind)
else:
return l
Эта функция, по сути, поймать повторяющиеся мотивы, а также показать из/до, где он пройдет:
>>> finder('123.123.123.')
[['123.', (1, 13)]] #the 123. motif take place from position 1 to position 13
Однако, похоже, что эта функция имеет память. Когда я снова использовал его с другой строкой, он также показал и предыдущий результат:
>>> finder('abc.abc.abc.')
[['123.', (1, 13)], ['abc.', (1, 13)]]
Итак, кто-то знает, как этого избежать? Как сбросить функцию?
Спасибо заранее, ребята. =)
См. Связанный обман. Вам нужно изменить 'l = []' на 'l = None', а затем каждый раз создавать новый пустой список. – tzaman
Привет @tzaman, сменить 'l' было легко. Но что вы имеете в виду при создании нового пустого списка каждый раз? Где? –
'if l is None: l = []' – tzaman