循环忽略反元音函数中的某些删除
在此代码中,我们的目标是创建一个 anti_vowel 函数,它将消除来自给定的字符串。但是,当使用示例文本“Hey Look Words!”进行测试时,它会返回“Hy lk Words!”的不良结果。问题在于删除过程中遗漏了第二个“o”。
问题的症结在于我们在迭代列表时修改了列表,这破坏了预期的行为。为了解决这个问题,我们创建列表的浅表副本并对其进行迭代。
为了更清楚地理解,让我们检查在循环开始时打印 char 和 textlist 时的循环行为:
H ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] e ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # ! l ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] o ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] k ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # Problem!! ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] W ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] o ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] d ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] s ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] ! ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] Hy lk Words!
正如我们所看到的,删除第一个“o”后,由于列表索引已提前,我们跳过了第二个“o”,导致遗漏了预期的内容删除。
为了解决这个问题,我们使用 textlist[:] 制作列表的副本。通过这样做,我们确保循环遍历静态列表,防止任何不需要的跳过。
此外,我们可以利用 Python 的列表推导式来获得更简洁的解决方案:
def remove_vowels(text): # An improved function name return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
以上是为什么我的循环在从字符串中删除元音时会跳过它们?的详细内容。更多信息请关注PHP中文网其他相关文章!