Instances van een teken in een reeks vervangen

Deze eenvoudige code die simpelweg probeert om puntkomma’s (op i-gespecificeerde posities) door dubbele punten te vervangen, werkt niet:

for i in range(0,len(line)):
     if (line[i]==";" and i in rightindexarray):
         line[i]=":"

Het geeft de fout

line[i]=":"
TypeError: 'str' object does not support item assignment

Hoe kan ik hier om werken om de puntkomma’s door dubbele punten te vervangen? Het gebruik van Vervang werkt niet omdat die functie geen index heeft – er kunnen enkele puntkomma’s zijn die ik niet wil vervangen.

voorbeeld

In de reeks zou ik een aantal puntkomma’s kunnen hebben, bijv. “Hei der!; Hallo daar,!”

Ik weet welke ik wil vervangen (ik heb hun index in de tekenreeks). Het gebruik van Vervang werkt niet omdat ik er geen index mee kan gebruiken.


Antwoord 1, Autoriteit 100%

Strings in Python zijn onveranderlijk, dus je kunt ze niet als een lijst behandelen en toewijzen aan indices.

Gebruik .replace()in plaats daarvan:

line = line.replace(';', ':')

Als u alleen Bepaalde semicols moet vervangen, moet u specifieker zijn. U kunt snijden gebruiken om het gedeelte van de tekenreeks te isoleren om in te vervangen:

line = line[:10].replace(';', ':') + line[10:]

Dat vervangt alle semi-colons in de eerste 10 tekens van de tekenreeks.


Antwoord 2, Autoriteit 25%

U kunt het onderstaande doen om elke char te vervangen door een respectieve char in een bepaalde index, als u .replace()

niet wilt gebruiken

word = 'python'
index = 4
char = 'i'
word = word[:index] + char + word[index + 1:]
print word
o/p: pythin

Antwoord 3, autoriteit 9%

Verander de string in een lijst; dan kunt u de tekens afzonderlijk wijzigen. Dan kun je het weer in elkaar zetten met .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

Antwoord 4, autoriteit 2%

Als u een enkele puntkomma wilt vervangen:

for i in range(0,len(line)):
 if (line[i]==";"):
     line = line[:i] + ":" + line[i+1:]

Ik heb het echter niet getest.


Antwoord 5

Je kunt niet zomaar een waarde toekennen aan een teken in de tekenreeks.
Gebruik deze methode om de waarde van een bepaald teken te vervangen:

name = "India"
result=name .replace("d",'*')

Uitvoer: In*ia

Als u bijvoorbeeld * wilt vervangen voor alle voorkomens van het eerste teken, behalve het eerste teken,
bijv. string = babbel output = ba**le

Code:

name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back

Antwoord 6

Dit zou een iets algemener geval moeten dekken, maar u zou het voor uw doel moeten kunnen aanpassen

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)

Antwoord 7

Als je vervangt door een indexwaarde gespecificeerd in variabele ‘n’, probeer dan het onderstaande:

def missing_char(str, n):
 str=str.replace(str[n],":")
 return str

Antwoord 8

Wat dacht je hiervan:

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

Antwoord 9

om de .replace() methode effectief te gebruiken op string zonder een aparte lijst te maken
kijk bijvoorbeeld eens naar de lijst met gebruikersnaam die een tekenreeks bevat met wat witruimte, we willen de witruimte vervangen door een onderstrepingsteken in elk van de gebruikersnaamtekenreeksen.

usernames = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]

overweeg om de bereikfunctie in python te gebruiken om de spaties in elke gebruikersnaam te vervangen.

for i in range(len(usernames)):
    usernames[i] = usernames[i].lower().replace(" ", "_")
print(usernames)

Antwoord 10

Om een ​​teken bij een specifieke index te vervangen, is de functie als volgt:

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

waarbij S een string is, n is index en C is een teken.


Antwoord 11

Ik heb deze methode geschreven om tekens te vervangen of de snaren op een specifiek exemplaar te vervangen. Instances Start op 0 (dit kan eenvoudig worden gewijzigd in 1 als u het optionele inst-argument voor 1 en test_instantie-variabele wijzigt tot 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

Antwoord 12

U kunt dit doen:

string = "this; is a; sample; ; python code;!;" #your desire string
result = ""
for i in range(len(string)):
    s = string[i]
    if (s == ";" and i in [4, 18, 20]): #insert your desire list
        s = ":"
    result = result + s
print(result)

Antwoord 13

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []
for i in names:
    if " " in i:
        i = i.replace(" ", "_")
    print(i)

Uitvoer:
Joey_Tribbiani
Monica_Geller
Chandler_Bing
Phoebe_Buffay


Antwoord 14

Mijn probleem was dat ik een lijst met nummers had, en ik wil slechts een deel van dat nummer vervangen, dus ik doe dit:

original_list = ['08113', '09106', '19066', '17056', '17063', '17053']
# With this part I achieve my goal
cves_mod = []
for i in range(0,len(res_list)):
    cves_mod.append(res_list[i].replace(res_list[i][2:], '999'))
cves_mod
# Result
cves_mod
['08999', '09999', '19999', '17999', '17999', '17999']

Antwoord 15

Nog eenvoudiger:

input = "a:b:c:d"
output =''
for c in input:
    if c==':':
        output +='/'
    else:
        output+=c
print(output)

uitvoer: a/b/c/d

Other episodes