在尝试选择2D 4x4数组中的第一个(从零开始计数)列时,我编写了以下脚本:
import numpy
a4x4=[list(range(4*i,4*(i+1))) for i in list(range(4))]
print(a4x4)
print(a4x4[:,1])
阵列似乎没问题:
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
但不是
[1,5,9,13]
对于第二次打印,我收到此错误:
TypeError:列表索引必须是整数,而不是元组
为什么会出现此错误,出现了什么问题?
答案 0 :(得分:3)
你导入numpy但你没有使用它。你所拥有的是一个列表列表,并且Python不支持多维切片(即,你需要[a4x4[i][1] for i in range(4)]
来获得你期望的结果,但实际上你应该使用numpy)。这是一个例子:
import numpy
a4x4=numpy.array([list(range(4*i,4*(i+1))) for i in list(range(4))])
print(a4x4)
print(a4x4[:,1])
顺便说一句,在numpy中你也可以直接构建你想要的数组,如下所示:
numpy.arange(4*4).reshape((4,4))
(而且在Python中我不需要上面的list
调用,我只是想尽可能保持代码与你的代码类似,以查看关键的事情,即转换列表列表变成一个numpy数组。)
答案 1 :(得分:1)
您可以使用列表理解生成所需的结果 - 就像您创建原始4x4一样:
a4x4=[list(range(4*i,4*(i+1))) for i in list(range(4))]
print([a4x4[i][1] for i in range(4)])
此外,您可以通过抛出list
函数来简化逻辑:
a4x4 = [range(4*i,4*(i+1)) for i in range(4)]
print([a4x4[i][1] for i in range(4)])