字符串替换Python中的元音?

时间:2011-09-04 18:28:59

标签: python

预期:

>>> removeVowels('apple')
"ppl"
>>> removeVowels('Apple')
"ppl"
>>> removeVowels('Banana')
'Bnn'

代码(初学者):

def removeVowels(word):
    vowels = ('a', 'e', 'i', 'o', 'u')
    for c in word:
        if c in vowels:
            res = word.replace(c,"")
    return res 

我如何同时使用小写和大写?

9 个答案:

答案 0 :(得分:6)

使用bytes.translate()方法:

def removeVowels(word, vowels=b'aeiouAEIOU'):
    return word.translate(None, vowels)

示例:

>>> removeVowels('apple')
'ppl'
>>> removeVowels('Apple')
'ppl'
>>> removeVowels('Banana')
'Bnn'

答案 1 :(得分:5)

这是使用列表而不是生成器的版本:

def removeVowels(word):
    letters = []            # make an empty list to hold the non-vowels
    for char in word:       # for each character in the word
        if char.lower() not in 'aeiou':    # if the letter is not a vowel
            letters.append(char)           # add it to the list of non-vowels
    return ''.join(letters) # join the list of non-vowels together into a string

您也可以将其编写为

''.join(char for char in word if char.lower() not in 'aeiou')

同样的事情,除了join一次找到一个非元音需要他们创建新字符串,而不是将它们添加到列表然后在最后加入它们。

如果你想加快速度,将值字符串set设置为更快地查找其中的每个字符,并且使用大写字母也意味着您不必将每个字符转换为小写

''.join(char for char in word if char not in set('aeiouAEIOU'))

答案 2 :(得分:4)

re.sub('[aeiou]', '', 'Banana', flags=re.I)

答案 3 :(得分:3)

@katrielalex解决方案也可以简化为生成器表达式:

def removeVowels(word):
    VOWELS = ('a', 'e', 'i', 'o', 'u')
    return ''.join(X for X in word if X.lower() not in VOWELS)

答案 4 :(得分:2)

由于所有其他答案都完全重写了代码,我认为你想要一个代码,只需稍加修改。另外,我保持简单,因为你是初学者。

附注:因为您在每个for循环中将res重新分配给word,所以您只会替换最后一个元音。而是直接在word

中替换元音
def removeVowels(word):
    vowels = ('a', 'e', 'i', 'o', 'u')
    for c in word:
        if c.lower() in vowels:
            word = word.replace(c,"")
    return word

说明:我刚刚将if c in vowels:更改为if c.lower() in vowels:

.lower()将字符串转换为小写。因此它将每个字母转换为小写,然后检查字母以查看它是否在元音元组中,然后如果它是替换它。

其他答案都很好,所以如果你还不知道,你应该查看他们使用的方法。

希望这有帮助!

答案 5 :(得分:2)

这里有另一个简单易用的功能,无需使用列表:

def removeVowels(word):
    vowels = 'aeiouAEIOU'
    for vowel in vowels:
        word = word.replace(vowel, '')
    return word

答案 6 :(得分:0)

def _filterVowels(word):
    for char in word:
        if char.lower() not in 'aeiou':
            yield char

def removeVowels(word):
    return "".join(_filterVowels(word))

答案 7 :(得分:0)

怎么样:

import re

def removeVowels(word):
    return re.sub("[aeiouAEIOU]", "", word)

答案 8 :(得分:0)

def removeVowels(word):
    vowels='aeiou'
    Vowels='AEIOU'
    newWord=''

    for letter in word:
        if letter in vowels or letter in Vowels:
            cap=letter.replace(letter,'')
        else: cap=letter
        newWord+=cap
    return newWord