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

Как я могу заменить символ в строке из определенного индекса? Например, я хочу получить средний символ из строки, такой как abc, и если символ не равен символу, указанному пользователем, я хочу заменить его.

Может быть, что-то подобное?

middle = ? # (I don't know how to get the middle of a string)

if str[middle] != char:
    str[middle].replace('')

Ответ 1

Поскольку строки являются неизменяемыми в Python, просто создайте новую строку, которая включает значение по желаемому индексу.

Предполагая, что у вас есть строка s, возможно, s = "mystring"

Вы можете быстро (и очевидно) заменить часть с нужным индексом, поместив ее между "кусочками" оригинала.

s = s[:index] + newstring + s[index + 1:]

Вы можете найти середину, разделив длину строки на 2 len(s)/2

Если вы получаете загадочные данные, вы должны позаботиться о том, чтобы обрабатывать индексы за пределами ожидаемого диапазона

def replacer(s, newstring, index, nofail=False):
    # raise an error if index is outside of the string
    if not nofail and index not in range(len(s)):
        raise ValueError("index outside given string")

    # if not erroring, but the index is still not in the correct range..
    if index < 0:  # add it to the beginning
        return newstring + s
    if index > len(s):  # add it to the end
        return s + newstring

    # insert the new string between "slices" of the original
    return s[:index] + newstring + s[index + 1:]

Это будет работать как

replacer("mystring", "12", 4)
'myst12ing'

Ответ 2

Строки в Python являются неизменными, что означает, что вы не можете их заменить.

Однако вы можете создать новую строку, которая будет изменена. Имейте в виду, что это не семантически эквивалентно, поскольку другие ссылки на старую строку не будут обновляться.

Например, вы можете написать функцию:

def replace_str_index(text,index=0,replacement=''):
    return '%s%s%s'%(text[:index],replacement,text[index+1:])

А затем, например, назовите его:

new_string = replace_str_index(old_string,middle)

Если вы не подаете замену, новая строка не будет содержать символ, который вы хотите удалить, вы можете передать ему строку произвольной длины.

Например:

replace_str_index('hello?bye',5)

вернет 'hellobye'; а также:

replace_str_index('hello?bye',5,'good')

вернет 'hellogoodbye'.

Ответ 3

Вы не можете заменить букву в строке. Преобразуйте строку в список, замените букву и преобразуйте ее обратно в строку.

>>> s = list("Hello world")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[int(len(s) / 2)] = '-'
>>> s
['H', 'e', 'l', 'l', 'o', '-', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello-World'