Python代码问题:如何从单词列表中筛选所有仅含2个元音的单词
筛选仅含2个元音单词的代码修复
原代码意图从单词列表中筛选出仅包含2个元音的单词,但执行后仅返回第一个符合条件的单词,运行结果为:
Result: ['tragedy']
原代码问题分析
def vowels(list): res = [] for word in list: vowel_n = 0 for x in word: if x in 'aeiou': vowel_n+=1 if vowel_n== 2: res.append(word) return res print(vowels(['tragedy', 'proof', 'dog', 'bug', 'blastoderm']))
问题有两点:
- 一旦找到某个单词的元音数达到2,就立刻执行
return res直接终止函数,导致后续单词无法被检查。 - 仅在元音数达到2时就将单词加入结果,没有判断单词的元音总数是否恰好为2,会误把元音数超过2的单词也纳入结果。
修正后的代码
def vowels(word_list): res = [] for word in word_list: vowel_n = 0 for x in word: if x.lower() in 'aeiou': # 兼容大写元音的情况(可选优化) vowel_n += 1 # 遍历完整个单词后,判断元音总数是否恰好为2 if vowel_n == 2: res.append(word) return res # 遍历所有单词后统一返回结果 print(vowels(['tragedy', 'proof', 'dog', 'bug', 'blastoderm']))
运行结果
Result: ['tragedy', 'proof']
说明:
- 移除了循环内的提前返回语句,让函数能遍历完所有单词后再返回结果。
- 调整判断逻辑:统计完单词的全部元音数量后,再检查是否恰好等于2,确保只保留符合要求的单词。
- 可选的
x.lower()处理,让代码能兼容包含大写元音的场景。
内容的提问来源于stack exchange,提问作者Denzel
相关产品推荐
相关产品推荐

