我发现不支持使用 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 数组上试过这个。在此处输入代码
>>> 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]
我知道我可以使用列表理解,但我的问题是“:”是否支持列表的列表?
最佳答案
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]
关于python - 无法在 Python 的列表列表中索引多个元素(使用 : operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57528303/