我写了一个函数来删除给定字符串中的元音。
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!'
为什么此代码不会删除输入中的所有元音?
答案 0 :(得分:2)
更改正在循环的list
可能会导致意外结果。首先复制一份:
for letter in text[:]:
使用[:]
称为列表切片。来自Python Docs:
所有切片操作都返回包含所请求元素的新列表。这意味着以下切片返回列表
a
的浅表副本>>> a[:]
还有其他制作副本的方法,例如:
list(text)
答案 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