Comment puis-je remplacer un caractère dans une chaîne à partir d'un certain index? Par exemple, je veux obtenir le caractère du milieu d'une chaîne, comme abc, et si le caractère n'est pas égal au caractère spécifié par l'utilisateur, je souhaite le remplacer.
Quelque chose comme ça peut-être?
middle = ? # (I don't know how to get the middle of a string)
if str[middle] != char:
str[middle].replace('')
Comme les chaînes sont immuable en Python, créez simplement une nouvelle chaîne qui inclut la valeur à l'index souhaité.
En supposant que vous ayez une chaîne s
, peut-être s = "mystring"
Vous pouvez rapidement (et évidemment) remplacer une partie d'un index souhaité en la plaçant entre des "tranches" de l'original.
s = s[:index] + newstring + s[index + 1:]
Vous pouvez trouver le milieu en divisant la longueur de votre chaîne par 2 len(s)/2
Si vous obtenez des entrées mystères, vous devez prendre soin de gérer les index en dehors de la plage attendue.
def replacer(s, newstring, index, nofail=False):
# raise an error if index is outside of the string
if not nofail and index not in xrange(len(s)):
raise ValueError("index outside given string")
# if not erroring, but the index is still not in the correct range..
if index < 0: # add it to the beginning
return newstring + s
if index > len(s): # add it to the end
return s + newstring
# insert the new string between "slices" of the original
return s[:index] + newstring + s[index + 1:]
Cela fonctionnera comme
replacer("mystring", "12", 4)
'myst12ing'
Les chaînes entre Python sont immuables ce qui signifie vous ne pouvez pas les remplacer certaines de leurs parties.
Vous pouvez cependant créer une nouvelle chaîne modifiée. Notez que ceci est pas sémantiquement équivalent car les autres références à l’ancienne chaîne ne seront pas mises à jour.
Vous pouvez par exemple écrire une fonction:
def replace_str_index(text,index=0,replacement=''):
return '%s%s%s'%(text[:index],replacement,text[index+1:])
Et puis, par exemple, appelez-le avec:
new_string = replace_str_index(old_string,middle)
Si vous ne fournissez pas de remplacement, la nouvelle chaîne ne contiendra pas le caractère que vous souhaitez supprimer, vous pouvez lui fournir une chaîne de longueur arbitraire.
Par exemple:
replace_str_index('hello?bye',5)
retournera 'hellobye'
; et:
replace_str_index('hello?bye',5,'good')
retournera 'hellogoodbye'
.
Vous ne pouvez pas remplacer une lettre dans une chaîne. Convertissez la chaîne en liste, remplacez la lettre et reconvertissez-la en chaîne.
>>> s = list("Hello world")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[int(len(s) / 2)] = '-'
>>> s
['H', 'e', 'l', 'l', 'o', '-', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello-World'