Как заменить символ в строке на другую строку?

Рейтинг: 3Ответов: 2Опубликовано: 24.02.2023

Проблема заключается в том, что такие команды работают просто так

s = "e"
s = s.replace("e", "E*x(t)")
# s = "E*x(t)"

print(s)

А вот допустим у нас массив из символов и нужно поменять соответствующий символ на формулку

if elements[i] == "e":
    elements[i] = elements[i].replace("e", "E_{depth}_{i} * x_{depth}(t)".format(depth=depth, i=i))
            # elements[i] = "E_{depth}_{i} * x_{depth}(t)".format(depth=depth, i=i)
elif elements[i] == "v":
    elements[i] = "eta_{depth}_{i} * diff(x_{depth}(t),t)".format(depth=depth, i=i)

то выкидывает ошибку TypeError: 'str' object does not support item assignment

Ответы

▲ 2

Если вы хотите заменить i-ый элемент строки на то, что вам нужно, то метод replace вам не помощник. Это можно сделать так:

string = 'Hello'

elements = []
for i in range(len(string)):
    if string[i]=='e':
        elements.append(f'E_{i}')
    elif string[i]=='o':
        elements.append(f'O_{i}')
    else:
        elements.append(string[i])
new_string = ''.join(elements)
print(new_string)

Используя словарь для замен, можно сократить код:

string = 'Hello'
replacements = {
    'e': 'E_{}',
    'o': 'O_{}',
}

elements = []
for i in range(len(string)):
    elements.append(replacements.get(string[i], string[i]).format(i))
new_string = ''.join(elements)
print(new_string)

А если еще и везде вызов метода format будет одинаковый (одинаковые аргументы):

string = 'Hello'
replacements = {
    'e': 'E_{}',
    'o': 'O_{}',
}

new_string = ''.join(
    replacements.get(string[i], string[i]).format(i)
        for i in range(len(string))
)
▲ 0

У меня Ваш код работает, но я добавила входной массив. Думаю, у вас он многомерный. Внимательнее посмотрите на исходный массив. У меня так:

elements =["e", "v","","ev"]
depth =0
for i in range(len(elements)):
 if elements[i] == "e":
  elements[i] = elements[i].replace("e", "E_{depth}_{i} * x_{depth}(t)".format(depth=depth, i=i))
            # elements[i] = "E_{depth}_{i} * x_{depth}(t)".format(depth=depth, i=i)
 elif elements[i] == "v":
  elements[i] = "eta_{depth}_{i} * diff(x_{depth}(t),t)".format(depth=depth, i=i)
  
print(elements)

Результат: