不同维度矩阵元素配对嵌套循环代码问题求助
解决矩阵元素按行配对的重复输出与索引错误问题
问题分析
你的核心问题是手动修改for循环的迭代变量(erow、ecol)无效——for循环会自动从range序列中取下一个值,覆盖你手动修改的变量,导致逻辑混乱,出现重复输出;同时else分支里盲目自增行索引,引发索引越界。此外代码还有语法错误(比如equip[][]的写法、中文引号)。
正确实现思路
按联赛(行)逐个处理:
- 遍历每一行的索引,同时获取对应行的设备列表和队伍列表
- 过滤掉两行中的占位符
"0",得到有效设备和有效队伍 - 按位置一一配对,取两者长度的较小值(每个联赛最多2支队伍,所以最多配2对)
- 输出每一对的结果
修正后的代码
先将示例矩阵转为Python可识别的列表格式:
# 定义设备矩阵(0为占位符) equip = [ ["E_1", "E_2", "0"], ["E_3", "E_4", "E_5"], ["E_6", "E_7", "E_8"], ["E_9", "E_10", "0"] ] # 定义队伍矩阵(0为占位符) team = [ ["T_1", "T_2"], ["T_3", "T_4"], ["T_5", "T_6"], ["T_7", "0"] ] # 遍历每个联赛的行索引 for row_idx in range(len(equip)): # 获取当前行的有效设备(过滤0) valid_equip = [e for e in equip[row_idx] if e != "0"] # 获取当前行的有效队伍(过滤0) valid_team = [t for t in team[row_idx] if t != "0"] # 一一配对,取两者长度的最小值(最多2对) for e, t in zip(valid_equip, valid_team): print(e) print(t) print()
代码解释
- 用列表推导式过滤每行的占位符
"0",直接得到需要配对的有效元素 zip(valid_equip, valid_team)会自动按位置配对,直到其中一个列表耗尽,完美满足“多余设备不配对”的需求- 不需要手动维护行、列索引,完全避免了原代码中循环变量冲突的问题
运行结果
E_1 T_1 E_2 T_2 E_3 T_3 E_4 T_4 E_6 T_5 E_7 T_6 E_9 T_7
内容的提问来源于stack exchange,提问作者user23487612
相关产品推荐
相关产品推荐

