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

Python检查输入是否在列表中时如何实现lower()式不区分大小写匹配

问题根源

lower()是Python字符串对象的专属方法,列表类型没有内置该方法,直接调用itemList.lower()会抛出属性错误,无法完成批量转小写的操作。

修正逻辑

要实现不区分大小写的匹配,只需要在校验时把列表内的每个字符串元素单独转成小写,和转成小写的用户输入做比对即可,不需要修改原列表存储的标准大小写格式。

直接适配原有代码的修正版本

保留原有的数字ID输入判断逻辑,仅修改名称校验部分的代码即可:

itemList = ['Dirt', 'Oak Log']

def takeName():
  itemName = ''

  while itemName == '':
    itemName = input('What Minecraft item would you like the crafting recipe for?\n')
    
    try:
      # 输入为数字时直接作为物品ID返回
      itemName = int(itemName)

    except ValueError:
      # 输入为字符串时做大小写不敏感匹配
      input_lower = itemName.lower()
      # 生成原列表对应的全小写临时对照列表
      lower_item_list = [item.lower() for item in itemList]
      if input_lower not in lower_item_list:
        print('Not a valid Minecraft item name or ID!\n')
        itemName = ''
      else:
        # 取匹配项在原列表中的索引
        itemName = lower_item_list.index(input_lower)

  return itemName

大列表优化方案

如果后续物品列表扩充到上百上千条,可以提前构建小写内容到索引的映射字典,查找效率更高,不需要每次循环都生成临时列表:

itemList = ['Dirt', 'Oak Log']
# 预构建小写映射:key为全小写物品名,value为对应原列表索引
item_index_map = {item.lower(): idx for idx, item in enumerate(itemList)}

def takeName():
  itemName = ''

  while itemName == '':
    itemName = input('What Minecraft item would you like the crafting recipe for?\n')
    
    try:
      itemName = int(itemName)
    except ValueError:
      input_lower = itemName.lower()
      if input_lower not in item_index_map:
        print('Not a valid Minecraft item name or ID!\n')
        itemName = ''
      else:
        itemName = item_index_map[input_lower]

  return itemName

注意:如果后续给itemList新增/删除物品,需要同步更新item_index_map映射,否则会出现匹配错误。

内容的提问来源于stack exchange,提问作者Kyran McCown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:18:29