用字符串中的其他字符更改多个字符

时间:2016-03-05 05:28:00

标签: python string

我试图操纵一个字符串。

从字符串中提取所有元音后,我想要替换所有的' v'用' b'以及所有''与' v'来自相同的字符串(例如,#34; accveioub"将首先成为ccvb,然后是ccbv)。

我在交换字符时遇到问题。我最终得到了ccvv,我想我会根据这段代码得到它。我正在考虑迭代字符串并使用if语句基本上停留在索引i .equals" v"然后将其替换为" b"和另一个声明说" b"用" v"替换它然后将这些人物一起追加或加入?

这是我的代码

def Problem4():
    volString = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
    s = "accveioub"
    chars = []
    index = 0

    #Removes all the vowels with the for loop
    for i in s:
        if i not in volString:
            chars.append(i)
    s2 = "".join(chars)
    print(s2)
    print(s2.replace("v", "b"))
    print(s2.replace("b", "v"))

>>> Problem4()
ccvb
ccbb
ccvv
>>> 

3 个答案:

答案 0 :(得分:3)

你实际上已经中途完成了,唯一需要注意的是当你想要“交换”string时,你必须创建“临时”string而不是替换是直。

你做的是这个:

ccvb 
ccbb #cannot distinguish between what was changed to b and the original b
ccvv #thus both are changed together

考虑使用string中不存在的字符作为第一个替换字符。更确切地说,我现在首先使用b更改所有1

s2 = s2.replace("b","1")
s2 = s2.replace("v","b")
s2 = s2.replace("1","v")

然后你会得到:

ccvb #original
ccv1 #replace b with 1
ccb1 #replace v with b
ccbv #replace 1 with v

这里最重要的一点是使用临时string

答案 1 :(得分:3)

Python的理解和生成器表达非常强大 您可以在执行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'

事实上你也在join()进行交换,但这可能有点过于冗长:

>>> ''.join('v' if c == 'b' else 'b' if c == 'v' else c for c in s if c not in volString)
'ccbv'

您可以将交换代码提取到映射字典中(dict.get(k, v)如果v不在字典中则返回k):

>>> vbmap = {'b': 'v', 'v': 'b'}
>>> ''.join(vbmap.get(c, c) for c in s if c not in volString)
'ccbv'

这些解决方案的优点是避免了所有中间字符串创建。

答案 2 :(得分:-1)

你应该使用中间替换来在python中获得正确的结果:

s2.replace('b',' ')
s2.replace('v','b')
s2.replace(' ','v')

换句话说,步骤如下:

  1. 将b替换为''space
  2. 将'v'替换为'b'
  3. 将''空格(即您的b字符)替换为'v'
  4. 祝你好运!