代码如下:
vowels = ['a','e','i','o','u']
def anti_vowel(text):
tlength = len(text)
words = []
result = ""
for word in range(len(text)):
words.append(text[word])
print words
for index, word in enumerate(words):
if word.lower() in vowels:
words.pop(index)
for old_word in words:
result += str(old_word)
return result
print anti_vowel("Hey look words!")
预期结果:“Hy lk wrds!”
明显的结果:“希洛克的话!”
我不明白为什么循环会跳过列表单词中索引5上的“o”。我知道我可以用另一种方法,把非元音单词添加到一个列表中,并将它们组合在一起,但是我想知道如何获得上述代码所需的结果。
最佳答案
您正在删除字符,但您的index
正在依赖。所以元音不再是索引了,你想。
最好不要在for循环中更改列表,而是创建一个新列表:
def anti_vowel(text):
words = []
for character in text:
if not (character.lower() in vowels or character.upper() in vowels):
words.append(character)
return ''.join(words)
或使用生成器表达式:
def anti_vowel(text):
return ''.join(c for c in text if c.lower() not in vowels)
如果要删除单个元素,必须使用while循环:
def anti_vowel(text):
text = list(text)
index = 0
while index < len(text):
if text[index].lower() in vowels:
del text[index]
else:
index += 1
return ''.join(text)