在Python中从数组中选择一列

时间:2014-09-17 18:00:23

标签: python arrays integer tuples

在尝试选择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:列表索引必须是整数,而不是元组

为什么会出现此错误,出现了什么问题?

2 个答案:

答案 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)])