Замена символа из определенного индекса
Как я могу заменить символ в строке из определенного индекса? Например, я хочу получить средний символ из строки, такой как 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'