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

Posted

技术标签:

【中文标题】如何访问二维数组的元素?【英文标题】:How to access the elements of a 2D array? 【发布时间】:2011-10-24 17:34:44 【问题描述】:

我想了解如何处理二维数组的元素。

如果我有例如:

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等?

【问题讨论】:

最好现在就开始使用 numpy! 您在尝试评估 a[1][1] 时是否遇到错误?结果是 1。你发现了什么? 这是一个二维数组。第一个索引访问矩阵中的行。第二个索引访问该列。所以 a[0][1] 表示第一行和第二列。矩阵是一个 2x2 网格。 【参考方案1】:

如果你有

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] 哇!我对快速答案印象深刻。这也是我的错误,因为我将它从我遇到的一个更大的问题简化为这个 a,b 案例。而且确实 a[0][0], a[1][1] 有效,但是当我不断尝试 [1][2] 时,我得到了错误:Traceback (last last call last): File "",第 1 行,在 a[1][2] IndexError: list index out of range ... 再加上在一些论坛上阅读到数组与 python 不完全兼容,这让我觉得我是做错事。再次感谢大家!【参考方案2】:

如果你想用二维数组做很多计算,你应该使用 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】:

仔细查看您的数组有多少个括号。当函数返回带有额外括号的答案时,我遇到了一个示例,如下所示:

>>>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

【讨论】:

【参考方案4】:

似乎在这里工作:

>>> 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

【讨论】:

【参考方案5】:

如果你有这个:

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

您可以使用以下命令轻松访问:

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

【讨论】:

【参考方案6】:

a[1][1] 确实按预期工作。你的意思是 a11 作为第一行的第一个元素吗?因为那将是 [0][0]。

【讨论】:

以上是关于如何访问二维数组的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指针表达式访问 C 中的二维数组的元素?

如何在AngularJS的二维数组中找到访问元素

C中的二维数组和指针 - 如何访问元素?

C语言如何定义指针指向字符型二维数组

JavaScript数组二维数组及相关练习

用指针实现对二维数组元素的访问