用于访问2D数组中的列的不同语法

时间:2015-12-31 06:29:31

标签: python arrays list numpy

我编写了以下代码来访问数组lst1

的第二列
import numpy
lst1 = [[1,2,3],[4,5,6],[7,8,9]]
lst1 = numpy.array(lst1)
lst2 = lst1[:,1]
lst3 = lst1[0::,1]

print lst2
print lst3

输出结果为:

[2 5 8]
[2 5 8]

lst2&之间是否存在差异? lst3lst2和{}之间的语法差异吗? lst3有意义吗?

如何使用列表(不使用numpy.array)获得相同的结果?

2 个答案:

答案 0 :(得分:3)

你可以很容易地使用列表理解来实现它:

>>> lst1=[[1,2,3],[4,5,6],[7,8,9]]
>>> [a[1] for a in lst1]
[2, 5, 8]

当涉及到嵌套列表时,没有办法将列作为列表而不进行复制,列表理解是将数据复制出来的最简单方法。你也可以在列表周围写一些包装器,它可以提供一个看起来像一个没有复制的列的视图,但是那时你也可以坚持使用numpy。

答案 1 :(得分:2)

功能

lst2 = lst1[:,1]
lst3 = lst1[0::,1]

是一样的。单:转换为slice(None,None,None),另一个转换为slice(0,None,None)。在这两种情况下,numpy索引函数(.__getitem__)将其表示为,从0开始,在结束时结束,然后逐步执行。

列表通过不采取元组来获取切片,例如: (slice(0,None,None), 1)。他们没有任何形式的多维语法。

[[1,2,3],[4,5,6],[7,8,9]]

是嵌套列表。也就是说,它是一个包含列表的列表。外部列表对内部列表的性质一无所知。另一个答案给出的列表理解是访问内部列表中元素的最合理方式。

值得注意的是,您可以将该列表理解应用于数组。也就是说,您可以遍历行,并从每行中选择项目。你通常不需要这样做,但值得了解。