Quel est le moyen le plus simple dans Python de remplacer un caractère dans une chaîne?
Par exemple:
text = "abcdefg";
text[1] = "Z";
^
Ne modifiez pas les chaînes.
Travailler avec eux comme des listes; transformez-les en chaînes seulement si nécessaire.
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
Les chaînes Python sont immuables (c’est-à-dire qu’elles ne peuvent pas être modifiées). Il y a beaucoup de raisons pour cela. Utilisez des listes jusqu'à ce que vous n'ayez plus le choix, puis transformez-les en chaînes.
Il y a trois façons. Pour les chercheurs de vitesse, je recommande la "Méthode 2"
Méthode 1
Donné par ceci réponse
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
Ce qui est assez lent comparé à la "Méthode 2"
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
Méthode 2 (MÉTHODE RAPIDE)
Donné par ceci réponse
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
Ce qui est beaucoup plus rapide:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
Méthode 3:
Tableau d'octets:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
new = text[:1] + 'Z' + text[2:]
Les chaînes Python sont immuables, vous les changez en les copiant.
La meilleure façon de faire ce que vous voulez est probablement.
text = "Z" + text[1:]
Le texte [1:] renvoie la chaîne dans le texte de la position 1 à la fin, les positions comptant de 0 à '1' étant le deuxième caractère.
edit: vous pouvez utiliser la même technique de découpage en chaîne pour n’importe quelle partie de la chaîne
text = text[:1] + "Z" + text[2:]
Ou si la lettre n'apparaît qu'une fois, vous pouvez utiliser la technique de recherche et de remplacement suggérée ci-dessous.
À partir de python 2.6 et de python 3, vous pouvez utiliser des tableaux auxiliaires qui sont mutables (ils peuvent être modifiés élément par élément contrairement aux chaînes):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
edit: Changé str en s
edit2: Comme mentionné dans les commentaires Alchemist Two-Bit, ce code ne fonctionne pas avec unicode.
Comme d’autres personnes l’ont dit, les chaînes Python sont généralement supposées être immuables.
Toutefois, si vous utilisez CPython, l’implémentation sur python.org, il est possible d’utiliser ctypes pour modifier la structure de chaîne en mémoire.
Voici un exemple où j'utilise la technique pour effacer une chaîne.
Marquer les données comme sensibles en python
Je mentionne cela dans un souci de complétude, et cela devrait être votre dernier recours car il est hack.
En fait, avec des chaînes, vous pouvez faire quelque chose comme ceci:
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
En gros, je "ajoute" + "des chaînes" dans une nouvelle chaîne :).
Ce code n'est pas le mien. Je ne pouvais pas me rappeler la forme du site où, je l'ai pris. Fait intéressant, vous pouvez utiliser ceci pour remplacer un ou plusieurs personnages par un ou plusieurs charectors. Bien que cette réponse soit très tardive, les novices comme moi (à tout moment) pourraient la trouver utile.
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,