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

Python中2D数组赋值异常:所有行重复最后一行数据问题求助

问题分析与解决

你的代码问题出在二维数组的创建逻辑上:two_dim_array=[[0]*no_of_cols]*no_of_rows 这行并没有生成no_of_rows个独立的子列表,而是生成了no_of_rows个指向同一个子列表的引用。所以当你修改最后一行的元素时,所有行都会同步变化——因为它们本质上是同一个列表的不同别名。

修正后的代码

把数组创建行替换为列表推导式,确保每个子列表都是独立的:

# To store data into two dimensional array (2X2) matrix data
no_of_rows = int(input("Enter number of rows:"))
no_of_cols = int(input("Enter number of columns:"))
# 列表推导式生成独立子列表
two_dim_array = [[0]*no_of_cols for _ in range(no_of_rows)]
for row in range(no_of_rows):
    for col in range(no_of_cols):
        number = int(input("Enter number to store in array:"))
        two_dim_array[row][col] = number
print(two_dim_array)

执行后输入原测试数据,输出会变为正确的结果:

Enter number of rows:2
Enter number of columns:2
Enter number to store in array:1
Enter number to store in array:3
Enter number to store in array:5
Enter number to store in array:7
[[1, 3], [5, 7]]

Python中二维数组的正确使用方法

1. 正确创建二维数组的方式

  • 列表推导式(推荐):
    • 基础写法:[[0]*cols for _ in range(rows)],外层循环为每行生成新的[0]*cols列表,确保各行独立。
    • 动态元素写法:[[0 for _ in range(cols)] for _ in range(rows)],适合需要逐行生成自定义元素的场景。
  • 嵌套循环构建:
    先初始化空数组,再逐行添加子列表:
    two_dim_array = []
    for _ in range(no_of_rows):
        current_row = []
        for _ in range(no_of_cols):
            current_row.append(0)
        two_dim_array.append(current_row)
    
  • 数值型多维数组(进阶):
    如果处理大量数值运算,推荐使用numpy库的ndarray,创建方式更高效:
    import numpy as np
    two_dim_array = np.zeros((no_of_rows, no_of_cols), dtype=int)
    

2. 元素访问与修改

只要二维数组创建正确,你原来使用two_dim_array[row][col]来访问或修改指定位置元素的逻辑是完全可行的,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:15:18