Changing multiple characters by other characters in a string

后端 未结 3 1306
醉话见心
醉话见心 2021-01-13 07:13

I\'m trying to manipulate a string.

After extracting all the vowels from a string, I want to replace all the \'v\' with \'b\' and all the \'b\' with \'v\' from the

相关标签:
3条回答
  • 2021-01-13 07:47

    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

    0 讨论(0)
  • 2021-01-13 07:48

    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.

    0 讨论(0)
  • 2021-01-13 07:56

    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

    1. Replace b to ' ' space
    2. Replace 'v' to 'b'
    3. Replace ' ' space (that was your b character) to 'v'

    Good luck!

    0 讨论(0)
提交回复
热议问题