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"
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:
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'
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)
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. ;-)
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!
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.
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()
s[:-4]