在Python中删除字符串中的字母

时间:2014-02-03 15:49:02

标签: python list python-2.7 for-loop

我写了一个函数来删除给定字符串中的元音。

def anti_vowel(text):
    text = list(text)
    vowel = 'aeiou'
    for letter in text:
        if letter.lower() in vowel:
            text.remove(letter)
    return ''.join(text)

当我输入'Hey look Words!'时,它不会删除所有的元音。输出是'Hy lk Words!'

为什么此代码不会删除输入中的所有元音?

4 个答案:

答案 0 :(得分:2)

更改正在循环的list可能会导致意外结果。首先复制一份:

for letter in text[:]:

使用[:]称为列表切片。来自Python Docs

  

所有切片操作都返回包含所请求元素的新列表。这意味着以下切片返回列表a的浅表副本    >>> a[:]

还有其他制作副本的方法,例如:

list(text)

了解更多how to make a copy of a list

答案 1 :(得分:2)

您正在迭代期间修改列表。一种解决方案是迭代列表的副本。另一种解决方案是避免副作用并发挥作用:

def anti_vowel(text):
    return "".join(c for c in text if c.lower() not in 'aeiou')

答案 2 :(得分:0)

这是一个解决方案:

def anti_vowel(text):
    text = list(text)
    result = list()
    for letter in text:
        if letter.lower() not in 'aeiou':
            result.append(letter)
    return ''.join(result)

s = 'Hey look Words!'
print anti_vowel(s)

输出:

Hy lk Wrds!

答案 3 :(得分:0)

你可以使用一个正则表达式模式,用帽子^

排除所有元音
import re
pattern = '([^aeiou])'
str_ = "no vowels"
no_vowel_list = re.findall(pattern,str_)
print no_vowel_list
相关问题