Changing Multiple Characters By Other Characters In A String
Solution 1:
You have done it half-way actually, the only thing to take note is that when you want to "swap" the string
, you got to create "temporary" string
instead of replacing is directly.
What you did was this:
ccvb
ccbb #cannot distinguish between what was changed to b and the original b
ccvv #thus both are changed together
Consider using the non existent character in the string
as the first replacement. Let say, I now change all b
with 1
first:
s2 = s2.replace("b","1")
s2 = s2.replace("v","b")
s2 = s2.replace("1","v")
Then you will get:
ccvb #original
ccv1 #replace b with 1
ccb1 #replace v with b
ccbv #replace 1 with v
The most important point here is the use of the temporary string
Solution 2:
Python's comprehension and generator expressions are quite powerful.
You can do the vowel removal the same time as you do the join()
:
>>> volString = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
>>> s = 'accveioub'
>>> ''.join(c for c in s if c not in volString)
'ccvb'
In fact you do the swap in the join()
too but this maybe a little too verbose:
>>> ''.join('v' if c == 'b' else 'b' if c == 'v' else c for c in s if c not in volString)
'ccbv'
You could pull out the swap code into a mapping dict (dict.get(k, v)
returns v
if k
is not in the dictionary):
>>> vbmap = {'b': 'v', 'v': 'b'}
>>> ''.join(vbmap.get(c, c) for c in s if c not in volString)
'ccbv'
The advantage being these solutions avoid all the intermediate string creations.
Solution 3:
You should use intermediate replacement to get proper result in python:
s2.replace('b',' ')
s2.replace('v','b')
s2.replace(' ','v')
In other words steps are following
- Replace b to ' ' space
- Replace 'v' to 'b'
- Replace ' ' space (that was your b character) to 'v'
Good luck!
Post a Comment for "Changing Multiple Characters By Other Characters In A String"