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

Python嵌套列表元素索引查找,修复try except引发的无限循环问题

问题排查与修正方案

原代码核心问题

  • 执行顺序错误:判断num in sub_list时num尚未定义,且用户输入转整数的操作放在了存在性判断之后,逻辑完全倒置
  • 类型不匹配:嵌套列表中存储的是字符串格式的数字,用户输入被转为int类型,永远无法匹配成功,触发无限循环
  • 循环结构错误:输入校验的死循环放在了子列表遍历循环内部,只会永远校验第一个子列表,无法匹配后续子列表的内容
  • 异常捕获逻辑错误:裸except捕获所有异常,且将「输入非数字」和「数字不存在」两种错误场景混为一谈,输入非数字时num未赋值就调用打印会触发新的报错
  • 返回位置错误:匹配到第一个子列表就直接返回,永远无法返回后续子列表的匹配结果

修正后代码

def find(mylist):
    # 提前遍历嵌套列表生成所有值与对应索引的映射表,避免每次输入重复遍历
    index_map = {}
    for row_idx, sub_list in enumerate(mylist):
        for col_idx, val in enumerate(sub_list):
            index_map[val] = (row_idx, col_idx)
    
    while True:
        input_str = input("请输入一个数字:").strip()
        # 校验输入是否为纯数字
        if not input_str.isdigit():
            print(f"{input_str} 不是有效数字")
            continue
        # 校验输入是否存在于列表中
        if input_str not in index_map:
            print(f"{input_str} 不在列表中")
            continue
        # 校验通过直接返回索引元组
        return index_map[input_str]

row, col = find([['23', '24', '25'], ['26', '27', '28'], ['29', '30']])
print(row, col)

功能验证

  • 输入24时,返回结果为(0, 1),符合预期
  • 输入44时,提示44 不在列表中,并要求用户重新输入
  • 输入非数字内容(如abc)时,提示abc 不是有效数字,并要求用户重新输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:15:06