cadenas son inmutables. Eso significa que no puedes asignarles nada. Se podría utilizar el formato:
>>> s = 'abc{0}efg'.format('d')
>>> s
'abcdefg'
O concatenación:
>>> s = 'abc' + 'd' + 'efg'
>>> s
'abcdefg'
o reemplazo (gracias Odomontois por recordármelo):
>>> s = 'abc0efg'
>>> s.replace('0', 'd')
'abcdefg'
Pero hay que tener en cuenta que todos estos métodos crean copia de la cadena, en lugar de modificarla in situ. Si desea una modificación in situ, puede usar un bytearray
, aunque eso solo funcionará para cadenas de caracteres simples, como señala alexis.
>>> b = bytearray('abc0efg')
>>> b[3] = 'd'
>>> b
bytearray(b'abcdefg')
O podría crear una lista de caracteres y manipular eso. Esta es probablemente la forma más eficiente y correcta de hacerlo con frecuencia, a gran escala de manipulación de cadenas:
>>> l = list('abc0efg')
>>> l[3] = 'd'
>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> ''.join(l)
'abcdefg'
Y considere el módulo re
para las operaciones más complejas.
El formato de cadenas y la manipulación de listas son los dos métodos que tienen más probabilidades de ser correctos y eficientes cuando se requieren pocas inserciones, y enumeran la manipulación cuando necesita actualizar frecuentemente su cadena.
También los métodos str.replace() y re.RegexObject.sub podrían ser útiles. – Odomontois
bytearray se ve bien para mí, ¿hay alguna manera de convertir cadena a matriz de bytes? – w00d
@iKid, en el código anterior, ''abc0efg'' es una cadena, y' bytearray (' abc0efg ') 'convierte esa cadena en bytearray. Entonces sí :) – senderle