无法在Python中的列表列表中索引多个元素(使用:运算符)

时间:2019-08-16 16:43:05

标签: python arrays list matrix indexing

我发现奇怪的是,不支持使用range(:)运算符对列表进行索引。

有时这会导致奇怪的值:

a = [[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a
[[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a[0][1]
2
>>> a[1][1]
4
>>> a[2][1]
6

但是

>>> a[0:3][1]
[3, 4]

我期望[2,4,6]。我在这里想念什么?

我也在Numpy数组上尝试过。enter code here

>>> a
[[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a[0][1]
2
>>> a[1][1]
4
>>> a[2][1]
6
>>> a[0:3][1]
[3, 4]

我知道我可以使用列表理解,但是我的问题是列表列表是否支持“:”?

6 个答案:

答案 0 :(得分:3)

numpy数组确实支持切片,但是您没有考虑数组的形状。在numpy中,此数组的形状为:

import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
print(a.shape)
>>>(4, 2)

表示为4x2。如果切片[0:3],则返回的是第一维的前三个元素。即:

print(a[0:3])
>>>[[1 2]
    [3 4]
    [5 6]]

此输出具有以下形状:

print(a[0:3].shape)
>>>(3, 2)

如果您这样做:

print(a[0:3][1])
>>>[3 4]

您再次调用形状为(3,2)的数组第一维的第一个元素。

相反,您想致电:

print(a[0:3][:,1])
>>>[2 4 6]

这将为您提供列索引1(其中0和1代表第二维的二维索引)的所有行元素(即,第一维的所有三个元素)。

更清洁(推荐):

print(a[0:3, 1])
>>>[2 4 6]

答案 1 :(得分:2)

使用:完全支持。在下面解释...

所以我们开始:

createSelectors

您问过:

a = [[1, 2], [3, 4], [5, 6], [7, 8]]

我们想要列表a中从零到三个[0:3]的项目。返回的那些项目是

a[0:3][1]

然后我们从该列表中请求位置1的项目,该项目返回:

[1, 2] --- position 0
[3, 4] --- position 1
[5, 6] --- position 2
[7, 8] --- position 3

如果要访问该较小列表中的项目,则需要添加另一个索引,如下所示:

[3, 4]

将返回:

a[0:3][1][1]

基本字符串拆分图: Breakdown of basic splitting

您的第一个括号(用蓝色表示)说:“请给列表a中位于位置0和3之间的元素,在这种情况下,它们都是全部。

您的第二个括号(用红色表示)说:“关于我的第一个括号的结果,给我放在位置1的元素”,这是整个子列表[3,4]

在这种情况下

4

可以简单地写为

a[0:3][1]

答案 2 :(得分:1)

让我们假设一个列表列表

list=[[1,2],[3,4],[5,6],[7,8]]

然后

list[0:3]

将返回一个包含从索引0到2的元素(也是列表)的列表

[[1, 2], [3, 4], [5, 6]]

因此,根据list [0:3] [1]将返回索引为“ 1”的第二个元素([3,4])。

  

a [0:3] [1]不会返回[2,4,6],它会返回包含3个元素的列表的列表并选择第二个元素。

答案 3 :(得分:0)

调用a[0:3]时,结果是一个包含a的前三个元素的列表。然后调用a[0:3][1],它返回该列表的第二个元素,即列表[3,4]

答案 4 :(得分:0)

普通的Python列表不支持这种切片。

您可以通过Numpy获得[2, 4, 6]

>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
>>> a[0:3, 1]
array([2, 4, 6])

答案 5 :(得分:0)

a = [[1, 2], [3, 4], [5, 6], [7, 8]]

a[0:3]

此输出为列表:

>>> [[1, 2], [3, 4], [5, 6]]

因此:

a[0:3][1]
  • 访问索引为1的元素[3, 4]

要从列表中获取所需的输出,请使用list comprehension

[x[1] for x in a[0:3]]

>>> [2, 4, 6]