如何访问二维数组的元素?

24

我想了解如何操作二维数组的元素。

例如,如果我有:

a= ( a11 a12 a13 )  and b = (b11 b12 b13) 
     a21 a22 a23             b21 b22 b23

我已经在Python中定义了它们,例如:

a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]
我发现我不能引用a[1][1],但可以引用a[1],这会给我一个[2,1]的结果。 我不明白如何访问这些数组的第二行?那将会是a21,a22,a23,b21,b22,b23吗? 如果要像c1 = a21*b21, c2 = a22*b22这样进行乘法运算,该怎么做呢?

1
最好现在开始使用numpy! - David Heffernan
2
你在尝试评估 a[1][1] 时是否遇到了错误?结果是1。你发现了什么? - Ray Toal
这是一个二维数组。第一个索引访问矩阵中的行,第二个索引访问列。因此,a[0][1]表示第一行和第二列。该矩阵是一个2x2的网格。 - Golden Lion
6个回答

23

如果你有

a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]
那么。
a[1][1]

会很好用。它指向第二列第二行,就像你想要的一样。

我不确定你做错了什么。

要乘以第三列的单元格,只需执行以下操作

c = [a[2][i] * b[2][i] for i in range(len(a[2]))] 

以下方法适用于任意行数。

编辑:第一个数字代表列,第二个数字代表行,与您当前的布局相同。它们都从开始编号。如果您想要交换顺序,可以这样做。

a = zip(*a)

或者你可以这样创建它:

a=[[1, 2, 3], [1, 1, 1]]

这是因为a[1]只有两个项目。数组从零开始编号。a[1]是第1列,所以只有a[1][0]a[1][1] - agf
哇!我对如此快速的答案印象深刻。这是我的错误,因为我将它简化为了一个a,b的情况,而不是一个更大的问题。实际上,a[0][0]、a[1][1]也可以工作,但当我继续尝试a [1][2]时,我得到了以下错误:Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> a[1][2] IndexError: list index out of range...加上在一些论坛上读到数组与Python不完全兼容,让我认为我做错了什么。再次感谢大家! - caran

4
如果您需要对二维数组进行多次计算,应该使用NumPy数组而不是嵌套列表。
对于您的问题,您可以使用:zip(* a)来转置它:
In [55]: a=[[1,1],[2,1],[3,1]]
In [56]: zip(*a)
Out[56]: [(1, 2, 3), (1, 1, 1)]
In [57]: zip(*a)[0]
Out[57]: (1, 2, 3)

3

在这里似乎可以工作:

>>> a=[[1,1],[2,1],[3,1]]
>>> a
[[1, 1], [2, 1], [3, 1]]
>>> a[1]
[2, 1]
>>> a[1][0]
2
>>> a[1][1]
1

2

仔细查看你的数组有多少个括号。我遇到过一个例子,函数返回了带有额外括号的答案,例如:

>>>approx
array([[[1192,  391]],
       [[1191,  409]],
       [[1209,  438]],
       [[1191,  409]]])

这个没有起作用

>>> approx[1,1]
IndexError: index 1 is out of bounds for axis 1 with size 1

这可能会打开括号:
>>> approx[:,0]
array([[1192,  391],
       [1191,  409],
       [1209,  438],
       [1191,  409]])

现在可以使用普通的元素访问符号:
>>> approx[:,0][1,1]
409

1

If you have this :

a = [[1, 1], [2, 1],[3, 1]]

您可以使用以下方式轻松访问此内容:

print(a[0][2])
a[0][1] = 7
print(a)

0

a[1][1] 的使用是正确的。你是不是想说 a11 是第一行的第一个元素?因为那应该是 a[0][0]。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接