Ajouter une chaîne à une certaine position en Python

157

Existe-t-il une fonction en Python que je peux utiliser pour insérer une valeur à une certaine position d'une chaîne?

Quelque chose comme ça:

"3655879ACB6"puis en position 4 ajouter "-"pour devenir"3655-879ACB6"

Michel Andrade
la source

Réponses:

272

Non. Les chaînes Python sont immuables.

>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Il est cependant possible de créer une nouvelle chaîne avec le caractère inséré:

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
Ignacio Vazquez-Abrams
la source
9
En plus de cela, vous pouvez utiliser des indices négatifs pour obtenir une position à partir de la droite, par exemples[:-4]
Reuben L.
Utilisation du langage de chaîne de format plus récent: '{0} - {1}'. Format (s [: 4], s [4:])
srock
60

Cela semble très simple:

>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6

Cependant, si vous aimez quelque chose comme une fonction, faites comme ceci:

def insert_dash(string, index):
    return string[:index] + '-' + string[index:]

print insert_dash("355879ACB6", 5)
Mario César
la source
26

Comme les chaînes sont immuables, une autre façon de le faire serait de transformer la chaîne en une liste, qui peut ensuite être indexée et modifiée sans aucune supercherie de découpage. Cependant, pour ramener la liste à une chaîne, vous devez utiliser .join()une chaîne vide.

>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'

Je ne sais pas comment cela se compare en termes de performances, mais je pense que c'est plus facile pour les yeux que les autres solutions. ;-)

jathanisme
la source
7

Fonction simple pour accomplir cela:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]
vatsug
la source
5

J'ai créé une méthode très utile pour ajouter une chaîne dans une certaine position en Python :

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring  

par exemple:

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, '%'))   

nous aurons en sortie:

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
Jorgesys
la source
8
Pourquoi calculez-vous la longueur de la chaîne tho?
Yytsi
2
Peut-être qu'il voulait vérifier que l'index était inférieur à la longueur de la chaîne ... puis il a oublié.
sce
Python utilise classiquement la casse de soulignement pour les noms de fonction, pas la casse de camel.
Michael Bates
2

Je pense que les réponses ci-dessus sont bonnes, mais j'expliquerais qu'il y a des effets secondaires inattendus mais bons pour eux ...

def insert(string_s, insert_s, pos_i=0):
    return string_s[:pos_i] + insert_s + string_s[pos_i:]

Si l'index pos_i est très petit (trop négatif), la chaîne d'insertion est ajoutée au préfixe. Si elle est trop longue, la chaîne d'insertion est ajoutée. Si pos_i est compris entre -len (string_s) et + len (string_s) - 1, la chaîne d'insertion est insérée au bon endroit.

Gary02127
la source
0

Python 3.6+ utilisant f-string:

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

donne

'1362511338_314'
DarinP
la source
-3

Si vous voulez de nombreux inserts

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()
enomad
la source
Je ne sais pas d'où vient la bibliothèque que vous importez ni quelle serait la sortie.
chrisfs