Python嵌套列表查找元素索引返回值恒为0问题排查
问题根因
原代码存在3个核心错误,导致运行结果不符合预期:
- 语法错误:
player_list中的玩家名称是字符串类型,未使用引号包裹,运行时会被识别为未定义变量直接抛出NameError。 - 索引取值逻辑错误:匹配到玩家名称后,调用的是子列表
player_info的index()方法,玩家名称固定在每个子列表的0号位,因此无论匹配到哪个玩家,得到的x值永远是0,最终永远返回大列表中索引为0的Bruce Wayne的信息,完全没有获取外层大列表的位置索引。 - 分支逻辑无效:
if和elif的判断条件完全一致,写在elif里的x = -1逻辑永远不会被触发;且如果遍历完都没匹配到玩家,变量x根本没有被定义,会直接抛出变量不存在的错误。
修正后可运行代码
# 所有字符串类型的玩家名需要用引号包裹 player_list = [ ['Bruce Wayne', 5, 5, 0, 0, 100, 15], ['Jessica Jones', 12, 0, 6, 6, 10, 6], ['Johnny Rose', 6, 2, 0, 4, 20, 10], ['Gina Linetti', 7, 4, 0, 3, 300, 15], ['Buster Bluth', 3, 0, 2, 1, 50, 1] ] def find_player(player_list, player_name): # 用enumerate同时遍历外层列表的索引和子列表内容 for outer_idx, player_info in enumerate(player_list): if player_info[0] == player_name: # 匹配到直接返回外层列表的索引 return outer_idx # 循环走完没匹配到,返回-1 return -1 player_name = str(input("Please enter name:")) y = find_player(player_list, player_name) if y == -1: print(player_name, "was not found in player list") else: print(player_list[y])
效果说明
- 输入存在的玩家名(如
Jessica Jones),会正确返回对应外层索引1,打印该玩家的全量数据。 - 输入不存在的玩家名,会正确返回-1,打印未找到提示。
内容的提问来源于stack exchange,提问作者Mohammad Hassani
相关产品推荐
相关产品推荐

