对象自行决定如何编制索引。当python看到
a[0:1, 2:4]
它首先为对象创建切片对象
:
分离值,然后将它们组合成元组:
(slice(0, 1, None), slice(2, 4, None))
.该元组被传递到对象的
__getitem__
:
a[(slice(0, 1, None), slice(2, 4, None))]
.把那个元组传给
list.__getitem__
它丢失了——它不认识这种类型的索引。把它放在一个数据框中,使用它的“iloc”索引,它就可以工作了。
>>> a = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
>>> a[0:1, 2:4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple
>>> import pandas as pd
>>> df = pd.DataFrame(a)
>>> df.iloc[0:1, 2:4]
2 3
0 2 3
还有其他软件包,比如
pandas
这让我们对索引的含义产生了深刻的认识。所以要回答你的问题,这取决于你谈论的是什么类型的物体。不同的对象可以自由地以不同的方式解释切片。