作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个从单词中删除所有元音的函数。它看起来像这样:
def remove_vowels(word):
vowels = ['a', 'e', 'i', 'o', 'u']
word = list(word)
for letter in word:
print('Looking for letter {}'.format(letter))
if letter.lower() in vowels:
try:
word.remove(letter)
except ValueError:
pass
return ''.join(word)
我希望它遍历单词中的所有字母,检查每个字母是否在元音数组中,如果是,则将其删除。
但是,它似乎并不检查所有字母。例如,对于以下调用:
print(remove_vowels('perception'))
我得到以下输出:
Looking for letter p
Looking for letter e
Looking for letter c
Looking for letter e
Looking for letter t
Looking for letter i
Looking for letter n
prcpton
由于某种原因,它跳过了 r
、第二个 p
和 o
。我用其他词得到了类似的结果。为什么会这样?
最佳答案
它之前不起作用的原因是在你的 for 循环期间你正在改变 word
这意味着每当你删除某些东西时它都会跳过迭代,因为删除导致每个字母向上移动一个位置。这意味着如果在位置 2 有删除,那么下一个项目现在位于位置 2,而它之后的项目位于位置 3,即下一次迭代所在的位置。
def remove_vowels(word):
vowels = ['a', 'e', 'i', 'o', 'u']
word = list(word)
print(word)
new_word = []
for letter in word:
print('Looking for letter {}'.format(letter))
if letter.lower() not in vowels:
try:
new_word.append(letter)
except ValueError:
pass
return ''.join(new_word)
print(remove_vowels('perception'))
关于Python for 循环没有遍历所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796462/
我是一名优秀的程序员,十分优秀!