Ce code simple qui essaie simplement de remplacer les points-virgules (aux positions spécifiées par i) par des deux-points ne fonctionne pas:
for i in range(0,len(line)):
if (line[i]==";" and i in rightindexarray):
line[i]=":"
Cela donne l'erreur
line[i]=":"
TypeError: 'str' object does not support item assignment
Comment puis-je contourner ce problème pour remplacer les points-virgules par des deux-points? L'utilisation de replace ne fonctionne pas car cette fonction ne prend aucun index - il peut y avoir des points-virgules que je ne veux pas remplacer.
Exemple
Dans la chaîne, je pourrais avoir n'importe quel nombre de points-virgules, par exemple "Hei der!; Hello there;!;"
Je sais lesquels je veux remplacer (j'ai leur index dans la chaîne). L'utilisation de replace ne fonctionne pas car je ne peux pas utiliser d'index avec elle.
str.replace()
BIF?str.find()
plutôt pour trouver la position du point-virgule, puis utilisez le découpage pour extraire la sous-chaîne.Réponses:
Les chaînes en python sont immuables, vous ne pouvez donc pas les traiter comme une liste et les affecter à des index.
Utilisez à la
.replace()
place:Si vous ne devez remplacer que certains points-virgules, vous devrez être plus précis. Vous pouvez utiliser le découpage pour isoler la section de la chaîne à remplacer dans:
Cela remplacera tous les points-virgules dans les 10 premiers caractères de la chaîne.
la source
Vous pouvez faire ce qui suit, pour remplacer n'importe quel caractère par un caractère respectif à un index donné, si vous ne souhaitez pas utiliser
.replace()
la source
Transformez la chaîne en une liste; alors vous pouvez changer les caractères individuellement. Ensuite, vous pouvez le remettre avec
.join
:la source
Si vous souhaitez remplacer un seul point-virgule:
Mais Havent l'a testé.
la source
line.replace(src,dst)
ne fait pas.line[:10].replace(src,dst) + line[10:]
fait, mais avec beaucoup moins de gravité. Supposonsline = ';'*12
. Votre solution créera une nouvelle chaîne 12 fois. La solution acceptée le fera une fois.Cela devrait couvrir un cas un peu plus général, mais vous devriez pouvoir le personnaliser selon vos besoins
J'espère que cela t'aides
la source
Vous ne pouvez pas simplement attribuer une valeur à un caractère de la chaîne. Utilisez cette méthode pour remplacer la valeur d'un caractère particulier:
Sortie: In * ia
Aussi, si vous voulez remplacer say * pour toutes les occurrences du premier caractère à l'exception du premier caractère, par exemple. string = sortie babble = ba ** le
Code:
la source
Si vous remplacez par une valeur d'index spécifiée dans la variable 'n', essayez ce qui suit:
la source
Que dis-tu de ça:
la source
pour utiliser efficacement la méthode .replace () sur une chaîne sans créer de liste séparée, par exemple, jetez un œil à la liste nom d'utilisateur contenant une chaîne avec un espace blanc, nous voulons remplacer l'espace blanc par un trait de soulignement dans chacune des chaînes de nom d'utilisateur.
pour remplacer les espaces blancs dans chaque nom d'utilisateur, envisagez d'utiliser la fonction range en python.
la source
Pour remplacer un caractère à un index spécifique, la fonction est la suivante:
où s est une chaîne, n est un index et c est un caractère.
la source
J'ai écrit cette méthode pour remplacer des caractères ou remplacer des chaînes à une instance spécifique. les instances commencent à 0 (cela peut facilement être changé en 1 si vous changez l'argument facultatif inst sur 1 et la variable test_instance sur 1.
la source
Tu peux le faire:
la source
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
noms d'utilisateur = []
o, p Joey_Tribbiani Monica_Geller Chandler_Bing Phoebe_Buffay
la source