Заменить слова из списка на другие в тексте

Имеются тексты:

text1 = "Шла Саша по шоссе вместе с Машей"
text2 = "Сегодня погода должна быть плохой"
text3 = "Я хочу купить торты и печенье"

Есть два списка:

spisok1 = ["Саша", "Машей", "плохой", "торты"]
spisok2 = ["Вика", "Никой", "хорошей", "фрукты"]

Необходимо заменить во всех текстах слова из spisok1 на слова из spisok2, чтобы получить следующий вид текстов:

text1 = "Шла Вика по шоссе вместе с Никой"
text2 = "Сегодня погода должна быть хорошей"
text3 = "Я хочу купить фрукты и печенье"

Пыталась использовать следующий код, но не получаю нужного результата

import re

texts = [text1, text2, text3]
new_texts = []
for text in texts:
    for word_number in range(0, len(spisok1)):
        new_text = re.sub(spisok1[word_number]), spisok2[word_number], text)
    new_texts.append(new_text)
print(new_texts)

Помогите, пожалуйста, с решением этой задачи


Ответы (3 шт):

Автор решения: dj1vs

Используй метод replace

Финальное решение будет выглядеть так:

text1 = "Шла Саша по шоссе вместе с Машей"
text2 = "Сегодня погода должна быть плохой"
text3 = "Я хочу купить торты и печенье"

spisok1 = ["Саша", "Машей", "плохой", "торты"]
spisok2 = ["Вика", "Никой", "хорошей", "фрукты"]

texts = [text1, text2, text3]

for text in texts:
    for i in range(len(spisok1)):
        text = text.replace(spisok1[i], spisok2[i])
    print(text)
→ Ссылка
Автор решения: GrAnd

Регулярным выражением одним махом всю строчку:

_map = dict(zip(spisok1, spisok2))

regexp = "|".join(re.escape(k) for k in _map) 
new_texts = [re.sub(regexp, lambda m: _map[m.group(0)], text) for text in texts]

Для упрощения поиска "старое слово"->"новое слово" два списка свёл в соответствующий словарь.

→ Ссылка
Автор решения: AndreyM

во внутреннем for замени строку

text = text.replace(spisok1[word_number]), spisok2[word_number])
→ Ссылка