¿Hay alguna función en Python que pueda usar para insertar un valor en una determinada posición de una cadena?
Algo como esto:
"3655879ACB6"
luego en la posición 4 agregue "-"
para convertirse"3655-879ACB6"
¿Hay alguna función en Python que pueda usar para insertar un valor en una determinada posición de una cadena?
Algo como esto:
"3655879ACB6"
luego en la posición 4 agregue "-"
para convertirse"3655-879ACB6"
Respuestas:
No. Las cadenas de Python son inmutables.
>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
Sin embargo, es posible crear una nueva cadena que tenga el carácter insertado:
>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
Esto parece muy fácil:
>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6
Sin embargo, si le gusta algo como una función, haga lo siguiente:
def insert_dash(string, index):
return string[:index] + '-' + string[index:]
print insert_dash("355879ACB6", 5)
Como las cadenas son inmutables, otra forma de hacerlo sería convertir la cadena en una lista, que luego se puede indexar y modificar sin ningún tipo de truco de corte. Sin embargo, para volver la lista a una cadena, debe usar .join()
una cadena vacía.
>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'
No estoy seguro de cómo se compara esto en cuanto al rendimiento, pero creo que es más fácil a la vista que las otras soluciones. ;-)
He creado un método muy útil para agregar una cadena en una determinada posición en Python :
def insertChar(mystring, position, chartoinsert ):
longi = len(mystring)
mystring = mystring[:position] + chartoinsert + mystring[position:]
return mystring
por ejemplo:
a = "Jorgesys was here!"
def insertChar(mystring, position, chartoinsert ):
longi = len(mystring)
mystring = mystring[:position] + chartoinsert + mystring[position:]
return mystring
#Inserting some characters with a defined position:
print(insertChar(a,0, '-'))
print(insertChar(a,9, '@'))
print(insertChar(a,14, '%'))
tendremos como salida:
-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
Creo que las respuestas anteriores están bien, pero explicaría que hay algunos efectos secundarios inesperados pero buenos para ellos ...
def insert(string_s, insert_s, pos_i=0):
return string_s[:pos_i] + insert_s + string_s[pos_i:]
Si el índice pos_i es muy pequeño (demasiado negativo), la cadena de inserción se antepone. Si es demasiado largo, la cadena de inserción se agrega. Si pos_i está entre -len (string_s) y + len (string_s) - 1, la cadena de inserción se inserta en el lugar correcto.
Si quieres muchas inserciones
from rope.base.codeanalyze import ChangeCollector
c = ChangeCollector(code)
c.add_change(5, 5, '<span style="background-color:#339999;">')
c.add_change(10, 10, '</span>')
rend_code = c.get_changed()
s[:-4]