web-dev-qa-db-fra.com

Ajouter une chaîne dans une certaine position dans Python

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

Quelque chose comme ça:

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

118
Michel Andrade

Non. Python Les chaînes 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 contenant le caractère inséré:

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
207

Cela semble très facile:

>>> 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)
45
Mario César

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 tricherie de découpage. Cependant, pour ramener la liste à une chaîne, vous devez utiliser .join() en utilisant 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 j'estime que c'est plus facile pour les yeux que pour les autres solutions. ;-)

21
jathanism

Fonction simple pour accomplir ceci:

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

J'ai fait un très utile méthode 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 comme sortie:

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
3
Jorgesys

Si vous voulez beaucoup d'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()
0
enomad