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

不同维度矩阵元素配对嵌套循环代码问题求助

解决矩阵元素按行配对的重复输出与索引错误问题

问题分析

你的核心问题是手动修改for循环的迭代变量(erow、ecol)无效——for循环会自动从range序列中取下一个值,覆盖你手动修改的变量,导致逻辑混乱,出现重复输出;同时else分支里盲目自增行索引,引发索引越界。此外代码还有语法错误(比如equip[][]的写法、中文引号)。

正确实现思路

按联赛(行)逐个处理:

  1. 遍历每一行的索引,同时获取对应行的设备列表和队伍列表
  2. 过滤掉两行中的占位符"0",得到有效设备和有效队伍
  3. 按位置一一配对,取两者长度的较小值(每个联赛最多2支队伍,所以最多配2对)
  4. 输出每一对的结果

修正后的代码

先将示例矩阵转为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:18:14