Cambiar un carácter en una cadena

Resuelto kostia asked hace 15 años • 16 respuestas

¿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";
           ^
kostia avatar Aug 04 '09 22:08 kostia
Aceptado

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.

scvalex avatar Aug 04 '2009 16:08 scvalex

¿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
Mehdi Nellen avatar Mar 03 '2014 14:03 Mehdi Nellen
new = text[:1] + 'Z' + text[2:]
Jochen Ritzel avatar Aug 04 '2009 15:08 Jochen Ritzel

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 textdesde 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.

Martin Beckett avatar Aug 04 '2009 15:08 Martin Beckett