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

如何在单次循环中生成指定结构的矩阵?

问题分析与代码修正

需求回顾

  • 列表A:包含100个数值,矩阵C的行数与A长度一致,第一列对应A的每个数值
  • 列表B:存储N个索引,矩阵C额外增加N列,每列仅在B中对应的索引位置为1,其余为0
  • 示例目标:A = [10,20,30,40],B = [1,3],则C = [[10,0,0],[20,1,0],[30,0,0],[40,0,1]]

你的代码错误点

  • insert参数顺序完全搞反:list.insert(index, element)是在指定索引位置插入元素,你写的nest.insert(A[i], 0)是把0插到索引为A[i]的位置(比如第一个循环里是索引10),这会把列表无端拉长,完全偏离生成每行的逻辑。
  • 未正确调用clear()方法:nest.clear只是方法引用,必须加括号nest.clear()才会执行清空操作,否则你一直在操作同一个列表对象,最终C里的所有元素指向的都是同一个列表,导致输出全部重复。
  • 行生成逻辑错误:你没有正确构建每行的结构,错误地用insert添加第一列和0/1值,导致每行的元素顺序和数量完全不符合需求。

修正后的代码

方式一:外层单次循环+列表推导(符合“单次循环”要求)

A = [10, 20, 30, 40]
B = [1, 3]
C = []

for i in range(len(A)):
    # 构建当前行:第一列是A[i],后续列对应B中索引的0/1值
    current_row = [A[i]] + [1 if i == idx else 0 for idx in B]
    C.append(current_row)

print(C)

方式二:嵌套循环(逻辑更直观)

A = [10, 20, 30, 40]
B = [1, 3]
C = []

for i in range(len(A)):
    current_row = [A[i]]
    # 为B中的每个索引生成对应列的0/1值
    for idx in B:
        current_row.append(1 if i == idx else 0)
    C.append(current_row)

print(C)

输出结果

[[10, 0, 0], [20, 1, 0], [30, 0, 0], [40, 0, 1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:24:21