我试图在标题中尽可能清楚,但很难简单地解释它.我必须从某个字符串中删除所有元音; 为此,我创建了一个循环,遍历由该字符串的字符组成的列表,删除元音然后加入它们:
def anti_vowel(text):
vow = ["a", "e", "i", "o", "u"]
chars = []
for i in text:
chars.append(i)
for i in chars:
if i.lower() in vow:
chars.remove(i)
return "".join(chars)
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行代码时,总会有一个不会被删除的元音.例子:
>>> anti_vowel("Hey look Words!")
Hy lk Words!
>>> anti_vowel("Frustration is real")
Frstrton s ral
Run Code Online (Sandbox Code Playgroud)
我不是Python的专家,但这很令人困惑.为什么它会删除一些字母并保留其他字母,即使它们完全相同?
来自@arshajii的评论解释了为什么删除循环中的字符不是一个好主意.要解决您的代码中的问题,(请注意,有更有效的方法来实现这一点,但看起来您正在学习,所以我将它放在这里.)
def anti_vowel(text):
vow = ["a", "e", "i", "o", "u"]
chars = []
for i in text: #No need of the two separate loops
if i.lower() not in vow:
chars.append(i)
return "".join(chars)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> def anti_vowel(text):
... vow = ["a", "e", "i", "o", "u"]
... chars = []
... for i in text: #No need of the two separate loops
... if i.lower() not in vow:
... chars.append(i)
... return "".join(chars)
...
>>> anti_vowel("Hey look Words!")
'Hy lk Wrds!'
>>> anti_vowel("Frustration is real")
'Frstrtn s rl'
>>>
Run Code Online (Sandbox Code Playgroud)
如果您的目标是返回与删除元音的原始字符串相同的字符串,请尝试:
import re
def anti_vowel(text):
return re.sub("[aeiou]+", "", text)
Run Code Online (Sandbox Code Playgroud)