如何在2D python数组中调用元素
我试图更改2D数组中某个元素的值。 2D数组是一个num1乘以num2的矩阵,每个元素为0。我正在尝试更改如何在2D python数组中调用元素,python,arrays,Python,Arrays,我试图更改2D数组中某个元素的值。 2D数组是一个num1乘以num2的矩阵,每个元素为0。我正在尝试更改Rth 将矩阵的行Cth列设置为1 matrix = [] def make_matrix(num1, num2): row = [] for i in range(num1): row.append(0) for i in range(num2): matrix.append(row) def change_to_one(R, C)
Rth
将矩阵的行Cth
列设置为1
matrix = []
def make_matrix(num1, num2):
row = []
for i in range(num1):
row.append(0)
for i in range(num2):
matrix.append(row)
def change_to_one(R, C):
matrix[R-1][C-1] = 1
make_matrix(3, 2)
change_to_one(2, 1)
print(matrix)
它打印
[[1,0,0],[1,0,0]]
而不是[[0,0,0],[1,0,0]]
您的代码中有两个问题:
- 执行
时,您正在使用对原始列表的引用。只需将列表中的元素复制为matrix.append(row[:])
,而不是使用行[:]
,就可以避免这种情况。否则,对第一行所做的任何更改都将反映在所有其他行中行
- 修改矩阵后忘记返回这在您的案例中不是一个主要问题,因为
矩阵的范围是全局的李>
matrix=[]
def制造矩阵(num1,num2):
行=[]
对于范围内的i(num1):
行。追加(0)
对于范围内的i(num2):
matrix.append(row[:])#代码中有两个问题:
- 执行
matrix.append(row[:])
时,您正在使用对原始列表的引用。只需将列表中的元素复制为行[:]
,而不是使用行
,就可以避免这种情况。否则,对第一行所做的任何更改都将反映在所有其他行中
- 修改矩阵后忘记返回这在您的案例中不是一个主要问题,因为
矩阵的范围是全局的李>
matrix=[]
def制造矩阵(num1,num2):
行=[]
对于范围内的i(num1):
行。追加(0)
对于范围内的i(num2):
append(row[:])#这与指针有关。
首先定义行=[]
当您执行此操作时,matrix.append(row)
num2
次,您将追加行的地址
,因此如果您随时更改行
,它将随后广播
换句话说,更改行
中的数据将更改附加在行
中的所有数据,在您的情况下,这些数据都是2D矩阵的行
请尝试以下代码:
def make_matrix(num1, num2):
for i in range(num2):
row = []
for i in range(num1):
row.append(0)
matrix.append(row)
在这里,我们每次都创建一个新的行
,然后将其附加到矩阵中,这样就不会广播任何行
中的更改。这与指针有关。
首先定义行=[]
当您执行此操作时,matrix.append(row)
num2
次,您将追加行的地址
,因此如果您随时更改行
,它将随后广播
换句话说,更改行
中的数据将更改附加在行
中的所有数据,在您的情况下,这些数据都是2D矩阵的行
请尝试以下代码:
def make_matrix(num1, num2):
for i in range(num2):
row = []
for i in range(num1):
row.append(0)
matrix.append(row)
在这里,我们每次都创建一个新的行
,然后将其附加到矩阵中,这样就不会广播任何行
中的更改。函数中的矩阵
用作“全局”变量。即使没有返回按钮
,它似乎也能工作,对吗?@Dino:你说得对。在这里,它也将毫无回报地发挥作用,这通常不是一个好的做法。虽然函数中的矩阵
用作“全局”变量,但我会将您的观点添加到我的答案中。即使没有返回按钮
,它似乎也能工作,对吗?@Dino:你说得对。在这里,它也将毫无回报地发挥作用,这通常不是一个好的做法。我将把你的观点添加到我的答案中,尽管matrix=[[0]*3代表范围(2)]
matrix=[[0]*3代表范围(2)]