Agregar cadena en una determinada posición en Python


157

¿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:


272

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'

9
Además de esto, podría usar índices negativos para obtener una posición desde la derecha, por ejemplos[:-4]
Reuben L.

Utilizando el lenguaje de cadenas de formato más nuevo: '{0} - {1}'. Format (s [: 4], s [4:])
srock

60

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)

26

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. ;-)


7

Función simple para lograr esto:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]

5

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!

8
¿Por qué calculas la longitud de la cuerda?
Yytsi

2
Tal vez quería comprobar que el índice tenía menos de la longitud de la cadena ... y luego se olvidó.
sce

Python usa convencionalmente mayúsculas y minúsculas para nombres de funciones, no mayúsculas y minúsculas.
Michael Bates

2

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.


0

Python 3.6+ usando f-string:

mys = '1362511338314'
f"{mys[:10]}_{mys[10:]}"

da

'1362511338_314'

-3

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()

No me queda claro de dónde proviene la biblioteca que está importando o cuál sería el resultado.
chrisfs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.