循环“忘记”删除某些项目[重复]
在此代码中,我们的目标是创建一个消除所有元音的 anti_vowel 函数(aeiouAEIOU) 来自字符串。它似乎运行正常,但在示例文本“Hey Look Words!”中留下了最后一个“o”。 (结果:“Hy lk Words!”)。
理解问题
问题是由于修改您正在迭代的列表而引起的。每次删除一个元素时,后续元素的索引都会发生变化,导致某些元素被跳过。
解决方案:复制列表
要解决此问题,请创建一个副本在迭代列表之前。这将确保删除元素不会影响其他元素的位置。
for char in textlist[:]: #shallow copy of the list
替代方案:列表推导式
列表推导式提供了一种更清晰、更直接的方法:
def remove_vowels(text): # function names should start with verbs! return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
通过利用 Python 字符串的可迭代性质,此推导式创建了一个新字符串不包括元音。
以上是为什么我的循环无法删除字符串中的所有元音?的详细内容。更多信息请关注PHP中文网其他相关文章!