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

Python二维数组转置代码运行结果异常问题排查

问题根源

bug出在目标数组b的初始化逻辑:

  • 你使用[[*range(len(a))]] * len(a[0])创建列表时,乘号对嵌套列表执行的是浅拷贝,b中的3个子列表本质是同一个列表对象的三个引用,内存地址完全一致,不是互相独立的三个行列表。
  • 双重循环赋值时,无论j取什么值,b[j]拿到的都是同一个公共列表,b[j][i] = a[i][j]本质是反复修改这个公共列表的第i位。每一轮外层i循环中,最后一次赋值是j=2时的a[i][2],也就是原数组第i行最后一列的元素。等整个循环跑完,公共列表存储的就是原数组最后一列的所有值,又因为三个行都指向这个列表,最终输出的b所有行就都和原数组最后一列相同。
修复方法

替换浅拷贝的初始化逻辑,保证每个子列表是独立创建的新对象即可:

a = [[1, 3, 2],
    [6, 7, 3],
    [2, 0, 1],
    [9, 0, 4]]

# 用列表推导式生成独立的子列表,b为3行4列结构匹配转置结果
b = [[0]*len(a) for _ in range(len(a[0]))]

for i in range(len(a)):
    for j in range(len(a[0])):
        b[j][i] = a[i][j]
print(a)
print(b)

如果不需要手动写循环实现,也可以直接用Python内置函数完成转置,代码更简洁:

b = [list(col) for col in zip(*a)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:31:11