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"

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'

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)

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


7

Fonction simple pour accomplir cela:

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

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!

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.


0

Python 3.6+ utilisant f-string:

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

donne

'1362511338_314'

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

Je ne sais pas d'où vient la bibliothèque que vous importez ni quelle serait la sortie.
chrisfs
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.