Cambiar un carácter en una cadena
¿Cuál es la forma más sencilla en Python de reemplazar un carácter en una cadena?
Por ejemplo:
text = "abcdefg";
text[1] = "Z";
^
No modifique las cadenas.
Trabaje con ellos como listas; conviértalos en cuerdas sólo cuando sea necesario.
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
Las cadenas de Python son inmutables (es decir, no se pueden modificar). Hay un montón de razones para esto. Utilice listas hasta que no tenga otra opción, solo entonces conviértalas en cadenas.
¿El método más rápido?
Hay tres maneras.
Para los amantes de la velocidad, recomiendo el 'Método 2'.
Método 1 :
Dado por la respuesta de scvalex :
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
Lo cual es bastante lento en comparación con el 'Método 2':
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
Método 2 (MÉTODO RÁPIDO) :
Dado por la respuesta de Jochen Ritzel :
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
Que es mucho más rápido:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
Método 3:
Matriz de bytes:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
new = text[:1] + 'Z' + text[2:]
Las cadenas de Python son inmutables, las cambias haciendo una copia.
La forma más sencilla de hacer lo que quieres es probablemente:
text = "Z" + text[1:]
Devuelve text[1:]
la cadena text
desde la posición 1 hasta el final, las posiciones cuentan desde 0, por lo que '1' es el segundo carácter.
editar: puedes usar la misma técnica de corte de cuerdas para cualquier parte de la cuerda
text = text[:1] + "Z" + text[2:]
O si la carta solo aparece una vez, puede utilizar la técnica de buscar y reemplazar que se sugiere a continuación.