web-dev-qa-db-fra.com

Remplacement d'un caractère à partir d'un certain index

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('')
16
Jordan Baron

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'
22
ti7

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'.

11
Willem Van Onsem

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'
8
Jacob Malachowski