У меня есть эта начальная строка.Оптимизация покрытия строк в Python
'bananaappleorangestrawberryapplepear'
А также кортеж со строками:
('apple', 'plepe', 'leoran', 'lemon')
Я хочу функцию так, что из исходной строки и кортежа со строками я получаю это:
'bananaxxxxxxxxxgestrawberryxxxxxxxar'
Я знаю, как сделать это обязательно, найдя слово в исходной строке для каждого слова, а затем закодируйте символ по символу во всей исходной строке с замещенными словами.
Но это не очень эффективно и уродливо. Я подозреваю, что должен быть какой-то способ сделать это более элегантно, функционально, с помощью itertools или что-то еще. Если вы знаете библиотеку Python, которая может сделать это эффективно, сообщите мне об этом.
ОБНОВЛЕНИЕ: Джастин Пил указал на случай, который я не описал в своем первоначальном вопросе. Если слово «aaa» и «aaaaaa» находится в начальной строке, результат должен выглядеть так: «xxxxxx».
Единственная проблема, с которой я вижу, - это следующий прецедент: одно из слов - «aaa» и строка s = 'aaaaa'. Этот метод даст результат «xxxaa», а не «xxxxx», потому что «finditer» находит следующее неперекрывающееся совпадение. Наверное, не придет, но это зависит от того, чего хочет OP. –
Да, мне было непонятно, что должно произойти с перекрывающимися экземплярами слов. –
@ Justin Я не думал об этом случае, но в случае строки «aaaaaa» слово «aaa» должно указывать «xxxxxx». Но это действительно угловой случай, я мог бы жить с «xxxaa», если что-то лучше. –