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
相关产品推荐
相关产品推荐

