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
相关产品推荐
相关产品推荐

