Home > OS >  How to replace characters of string from a list entry in Python?
How to replace characters of string from a list entry in Python?

Time:12-10

I have a string in which I want to replace certain characters with "*". But replace() function of python doesn't replace the characters. I understand that the strings in python are immutable and I am creating a new variable to store the replaced string. But still the function doesn't provide the replaced strings.

This is the following code that I have written. I have tried the process in two ways but still don't get the desired output:

1st way:

a = "AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIAP"
rep = ['A','C','P']

for char in rep:
    new = a.replace(char, "*")

print(new)

Output:

AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIA*

2nd way:

a = "AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIAP"
rep = ['A','C','P']

for i in a:
    if(i in rep):
        new = a.replace(i, "*")
print(new)

Output:

AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIA*

Any help would be much appreciated. Thanks

CodePudding user response:

You assign the result of a.replace(char, "*") to new, but then on the next iteration of the for loop, you again replace parts of a, not new. Instead of assigning to new, just assign the result to a, replacing the original string.

a = "AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIAP"
rep = ['A','C','P']

for char in rep:
    a = a.replace(char, "*")

print(a)

CodePudding user response:

In addition to the answers offered, I would suggest that regular expressions make this perhaps more straightforward, accomplishing all of the substitutions with a single function call.

>>> import re
>>> a = "AGGCFTFGADFADTRFCAGFADARTRADFACDGFLKLIAP"
>>> rep = ['A','C','P']
>>> r = re.compile('|'.join(rep))
>>> r.sub('*', a)
'*GG*FTFG*DF*DTRF**GF*D*RTR*DF**DGFLKLI**'

Just in case someone decides to be clever and puts something regex significant in rep, you could escape those when compiling your regex.

r = re.compile('|'.join(re.escape(x) for x in rep))

CodePudding user response:

Others have explained errors in posted code. An alternative using generator expression:

new = ''.join("*" if char in ['A','C','P'] else char for char in a)
print(new)
>>> '*GG*FTFG*DF*DTRF**GF*D*RTR*DF**DGFLKLI**'
  • Related