Reemplazo de un personaje de un determinado índice

¿Cómo puedo reemplazar un carácter en una cadena de un determinado índice? Por ejemplo, quiero obtener el carácter intermedio de una cadena, como abc, y si el carácter no es igual al carácter que especifica el usuario, quiero reemplazarlo.

Algo como esto tal vez?

middle = ? # (I don't know how to get the middle of a string) if str[middle] != char: str[middle].replace('') 

Como las cadenas son inmutables en Python, simplemente cree una nueva cadena que incluya el valor en el índice deseado.

Suponiendo que tiene una cadena s , quizás s = "mystring"

Puede rápidamente (y obviamente) reemplazar una porción en un índice deseado colocándola entre “rebanadas” del original.

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

Puede encontrar el medio dividiendo la longitud de su cadena por 2 len(s)/2

Si está obteniendo entradas misteriosas, debe tener cuidado para manejar índices fuera del rango esperado

 def replacer(s, newstring, index, nofail=False): # raise an error if index is outside of the string if not nofail and index not in xrange(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:] 

Esto funcionará como

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

Las cadenas en Python son inmutables, lo que significa que no puedes reemplazar partes de ellas.

Sin embargo, puede crear una nueva cadena que se modifica. Tenga en cuenta que esto no es semánticamente equivalente, ya que otras referencias a la cadena antigua no se actualizarán.

Podrías, por ejemplo, escribir una función:

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

Y luego, por ejemplo, llámalo con:

 new_string = replace_str_index(old_string,middle) 

Si no alimenta un reemplazo, la nueva cadena no contendrá el carácter que desea eliminar, puede darle una cadena de longitud arbitraria.

Por ejemplo:

 replace_str_index('hello?bye',5) 

volverá 'hellobye' ; y:

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

volverá 'hellogoodbye' .

No puedes reemplazar una letra en una cadena. Convierta la cadena en una lista, reemplace la letra y vuelva a convertirla en una cadena.

 >>> 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'