我发现奇怪的是,不支持使用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]
我知道我可以使用列表理解,但是我的问题是列表列表是否支持“:”?
答案 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]
您的第一个括号(用蓝色表示)说:“请给列表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]