Sustitución de un carácter de una cadena en python

En Python, ¿son las cuerdas mutables? La línea someString[3] = "a" lanza el error

TypeError: el objeto ‘str’ no admite la asignación de elementos

Puedo ver por qué (como podría haber escrito someString [3] = “test” y eso obviamente sería ilegal) pero ¿hay un método para hacer esto en python?

Las cadenas de Python son inmutables, por lo que no admiten la asignación de elementos o segmentos. Tendrá que construir una nueva cadena usando, por ejemplo, someString[:3] + 'a' + someString[4:] o algún otro enfoque adecuado.

En lugar de almacenar su valor como una cadena, puede usar una lista de caracteres:

 >>> l = list('foobar') >>> l[3] = 'f' >>> l[5] = 'n' 

Luego, si desea convertirlo de nuevo a una cadena para mostrarlo, use esto:

 >>> ''.join(l) 'foofan' 

Si está cambiando muchos caracteres de uno en uno, este método será considerablemente más rápido que construir una nueva cadena cada vez que cambie un carácter.

En los nuevos pitones, también puede utilizar el tipo incorporado bytearray , que es mutable. Consulte la documentación estándar. Pero “lo suficientemente nuevo” aquí significa 2.6 o superior, por lo que no es necesariamente una opción.

En las pitones más antiguas tienes que crear una nueva str como se mencionó anteriormente, ya que son inmutables. Ese suele ser el enfoque más legible, pero a veces usar un tipo diferente de secuencia mutable (como una lista de caracteres, o posiblemente un array.array ) tiene sentido. array.array es un poco torpe, y generalmente se evita.

 >>> import ctypes >>> s = "1234567890" >>> mutable = ctypes.create_string_buffer(s) >>> mutable[3] = "a" >>> print mutable.value 123a567890