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

如何判断字符串是否在列表中并避免单复数同根单词被重复收录

单复数单词互斥校验实现方案

核心思路是给单复数单词建立分组映射,用集合记录已经提交过的分组,只要同分组内的任意单词(单数/复数)被提交过,同组其他单词都会被拦截。

完整修改后代码

# 读取文件内的所有合法单词
with open('fruits.txt') as f:
    text = [line.strip().upper() for line in f]

ans = []  # 存储正确答案
used_groups = set()  # 记录已经提交过的单词分组,用分组标识判断是否重复

# 单复数映射表,单数为分组标识,值为对应的复数,新增单词直接更新此字典即可
fruit_mapping = {
    'APPLE': 'APPLES',
    'ORANGE': 'ORANGES',
    'BANANA': 'BANANAS'
}
# 生成反向映射,方便通过复数找对应分组
reverse_fruit_mapping = {v: k for k, v in fruit_mapping.items()}

# 此处可以按你的需求加循环输入逻辑,示例为单次输入逻辑
i = 0
input_answer = input(str(i + 1) + '. ').upper()

# 首先判断输入是否为合法单词(在文件列表内)
if input_answer in text:
    # 查找当前输入单词对应的分组标识
    current_group = None
    if input_answer in fruit_mapping:
        current_group = input_answer
    elif input_answer in reverse_fruit_mapping:
        current_group = reverse_fruit_mapping[input_answer]
    
    # 判断分组是否已经被提交过
    if current_group in used_groups:
        print("The word is repeated")
    else:
        # 分组未提交,将分组标记为已用,将答案加入结果列表
        used_groups.add(current_group)
        ans.append(input_answer)
        print("Answer accepted")
else:
    print("Invalid answer")

逻辑说明

  • 单复数属于同一个分组,统一用单数作为分组标识,不管先输入单数还是复数,都会命中同一个分组校验
  • 用set类型存储已使用分组,查询时间复杂度为O(1),比列表查询效率更高
  • 需要新增单词时,仅需要更新fruit_mapping字典即可,无需修改其他校验逻辑

测试效果

  • 输入APPLE,答案被接受,ans加入APPLE,后续输入APPLES会提示重复,不加入列表
  • 输入APPLES,答案被接受,ans加入APPLES,后续输入APPLE会提示重复,不加入列表

内容的提问来源于stack exchange,提问作者Favored Luck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:03