You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

筛选不含qwerty字母的5字母单词时结果不符预期的问题

筛选不含qwerty字母的5字母单词时结果不符预期的问题

嘿,我帮你分析下问题所在哈!你现在遇到的情况是筛选不含qwerty字母的5字母单词时,结果比预期多了不少,对吧?

先看你原来的代码逻辑:统计每个单词里不在bad列表的字母数,等于5就加入新列表。这个逻辑本身没毛病,但大概率是大小写不匹配导致的误差!比如你的bad列表里都是小写的q/w/e/r/t/y,但如果你的单词列表里有大写的Q、W这些字母,那判断letter not in bad的时候就会认为这些大写字母不在bad里,错误地把这类单词算成符合条件的,结果自然就偏多了。

另外,给你两个优化建议:

  • 统一大小写:处理每个单词时转成小写(或者大写),再判断字母是否在bad里,这样就不会有大小写的坑了。
  • 优化判断逻辑:不用统计数量,直接用all()函数检查单词里的所有字母都不在bad里,代码更简洁直观,而且把bad改成集合的话,查找速度会更快(毕竟你有一万多个单词,集合的查找效率比列表高很多)。

改进后的代码可以这样写:

# 假设words是包含所有14855个5字母单词的列表
bad_letters = {'q', 'w', 'e', 'r', 't', 'y'}
filtered_words = []

for word in words:
    # 转换为小写,消除大小写差异
    lower_word = word.lower()
    # 检查单词中所有字母都不在禁用列表内
    if all(char not in bad_letters for char in lower_word):
        filtered_words.append(word)

print(len(filtered_words))

或者用更简洁的列表推导式版本:

bad_letters = {'q', 'w', 'e', 'r', 't', 'y'}
filtered_words = [word for word in words if all(c.lower() not in bad_letters for c in word)]
print(len(filtered_words))

这样调整后,应该就能得到正确的3217这个结果啦!

备注:内容来源于stack exchange,提问作者Brett Satisky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:29:27