Ce code simple qui tente simplement de remplacer les points-virgules (aux postions 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]=":"
Ça 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? Utiliser replace ne fonctionne pas car cette fonction ne prend aucun index - il peut y avoir des points-virgules que je ne souhaite pas remplacer.
Exemple
Dans la chaîne, je pourrais avoir un nombre quelconque de points-virgules, par exemple "Hei der!; Hello there;!;"
Je sais lesquels je veux remplacer (j'ai leur index dans la chaîne). Utiliser replace ne fonctionne pas car je ne parviens pas à utiliser un index.
Les chaînes en python étant immuables, vous ne pouvez pas les traiter comme une liste et les affecter à des index.
Utilisez .replace()
à la place:
line = line.replace(';', ':')
Si vous devez remplacer uniquement certains points-virgules, vous devrez être plus spécifique. Vous pouvez utiliser le découpage en tranches pour isoler la section de la chaîne à remplacer dans:
line = line[:10].replace(';', ':') + line[10:]
Cela remplacera tous les points-virgules dans les 10 premiers caractères de la chaîne.
Vous pouvez faire ce qui suit pour remplacer un caractère par un autre à un index donné, si vous ne souhaitez pas utiliser .replace()
Word = 'python'
index = 4
char = 'i'
Word = Word[:index] + char + Word[index + 1:]
print Word
o/p: pythin
Tournez la chaîne dans une liste; alors vous pouvez changer les caractères individuellement. Ensuite, vous pouvez le remettre avec .join
:
s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d
Si vous souhaitez remplacer un seul point-virgule:
for i in range(0,len(line)):
if (line[i]==";"):
line = line[:i] + ":" + line[i+1:]
Havent l'a testé cependant.
Cela devrait couvrir un cas légèrement plus général, mais vous devriez pouvoir le personnaliser pour vos besoins.
def selectiveReplace(myStr):
answer = []
for index,char in enumerate(myStr):
if char == ';':
if index%2 == 1: # replace ';' in even indices with ":"
answer.append(":")
else:
answer.append("!") # replace ';' in odd indices with "!"
else:
answer.append(char)
return ''.join(answer)
J'espère que cela t'aides
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:
name = "India"
result=name .replace("d",'*')
Sortie: en * ia
De même, si vous voulez remplacer, dites * pour toutes les occurrences du premier caractère sauf le premier, string = babble output = ba ** le
Code:
name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back
Si vous remplacez par une valeur d'index spécifiée dans la variable 'n', essayez ce qui suit:
def missing_char(str, n):
str=str.replace(str[n],":")
return str
J'ai écrit cette méthode pour remplacer des caractères ou des chaînes à une instance spécifique. les instances commencent à 0 (cela peut facilement être modifié en 1 si vous modifiez l'argument optionnel inst en 1 et la variable test_instance en 1.
def replace_instance(some_Word, str_to_replace, new_str='', inst=0):
return_Word = ''
char_index, test_instance = 0, 0
while char_index < len(some_Word):
test_str = some_Word[char_index: char_index + len(str_to_replace)]
if test_str == str_to_replace:
if test_instance == inst:
return_Word = some_Word[:char_index] + new_str + some_Word[char_index + len(str_to_replace):]
break
else:
test_instance += 1
char_index += 1
return return_Word
Pour remplacer un caractère à un index spécifique, la fonction est la suivante:
def replace_char(s , n , c):
n-=1
s = s[0:n] + s[n:n+1].replace(s[n] , c) + s[n+1:]
return s
où s est une chaîne, n est un index et c est un caractère.
Que dis-tu de ça:
sentence = 'After 1500 years of that thinking surpressed'
sentence = sentence.lower()
def removeLetter(text,char):
result = ''
for c in text:
if c != char:
result += c
return text.replace(char,'*')
text = removeLetter(sentence,'a')