在以下python代码中:
import numpy as np
a = np.random.normal(2, 0.1, 10)
c = [0,1,2,3,4,5,6,7,8,9]
b = [2,4]
print(a[b])
print(c[b])
为什么可以执行print(a [b]),但显示print(c [b])错误消息?
答案 0 :(得分:3)
这种类型的索引仅适用于numpy.ndarray
,而c
只是Python list
,因此您不能像numpy.ndarray
那样对其进行索引。您可以先将其转换为numpy数组,然后再使用索引。
c = np.array(c)
答案 1 :(得分:0)
在python中,list接受基于整数的索引。
执行
## Replace print(c[b]) with following line
print(c[b[0]:b[1])
以上代码的输出
[2, 3]
C列表正在从索引2迭代到索引3。正如python迭代到end-1索引一样。
例如c [2:4]仅考虑索引2和索引3。
答案 2 :(得分:0)
在这样的对象上使用括号时:
a[b]
您正在使用b作为参数调用对象a的类的函数__getitem__
。有关该功能的更多详细信息,请参见this。
现在,如果a[b]
在引发c[b]
时未显示错误,则意味着__getitem__
类的方法a
的实现正在处理b
,而c
类的此方法的实现则没有。每个功能的行为都完全相同,只是隐藏了一部分调用。