Как правильно установить правила FST
Я связался с tranducers и python, поэтому я использую библиотеку FST по умолчанию. Например, у меня есть список ['a','b','c']
, Мне нужно заменить 'b'
если это сопровождается 'c'
, Я делаю следующие правила, но это работает только если 'b'
находится между 'a'
а также 'c'
и только с этой длиной массива.
from fst import fst
list = ['a','b','c']
t = fst.FST('example')
for i in range(0,len(list)):
t.add_state(str(i))
t.initial_state = '0'
t.add_arc('0','0',('a'),('a'))
t.add_arc('0','1',('b'),('d'))
t.add_arc('1','1',('c'),('c'))
t.set_final('1')
print t.transduce(list)
я получил ['a','d','c']
Мне нужно уметь заменить 'b'
с 'd'
где бы это ни было например заменить 'b'
когда следует 'l'
['m','r','b','l'] => ['m','r','o','l']
['m','b','l'] => ['m','o','l']
['b','l','o'] => ['o','l','o']
Пожалуйста, помогите мне, спасибо!
1 ответ
Решение
Рассмотрим эту функцию...
lists = [['m','r','b','l'],
['m','b','l'],
['b','l','o'],
['b','m','o']]
def change(list_, find_this, followed_by, replace_to):
return_list = list_.copy()
idx = list_.index(find_this)
if list_[idx+1] == followed_by:
return_list = list_.copy()
return_list[idx] = replace_to
return return_list
for lst in lists:
print(change(lst, 'b', 'l', 'o'))
''' output:
['m', 'r', 'o', 'l']
['m', 'o', 'l']
['o', 'l', 'o']
['b', 'm', 'o']
'''
Вы должны добавить другие соответствующие проверки, хотя.