python中列表切片语法的问题

Din*_*gle 8 python syntax slice

扩展索引语法在python的doc中提到.

slice([start], stop[, step])
Run Code Online (Sandbox Code Playgroud)

使用扩展索引语法时也会生成切片对象.例如:a[start:stop:step]a[start:stop, i].有关itertools.islice()返回迭代器的备用版本,请参阅参考资料.

a[start:stop:step]按照描述工作.但是第二个呢?怎么用?

unu*_*tbu 12

a[start:stop,i]调用方法a.__getitem__((slice(start,stop,None), i)).

如果TypeError是列表,则会引发TypeError ,但如果a是numpy数组,则它是有效且有用的表示法.实际上,我相信Numpy的开发人员要求Python的开发人员精确地扩展有效的Python切片表示法,以便更容易实现numpy数组切片表示法.

例如,

import numpy as np
arr=np.arange(12).reshape(4,3)
print(arr)
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]]
Run Code Online (Sandbox Code Playgroud)

a选择第1行和第2行,然后1:3 选择第三列:

print(arr[1:3,2])
# [5 8]
Run Code Online (Sandbox Code Playgroud)

PS.要试验发送到哪个切片2,您可以使用此玩具代码:

class Foo(list):
    def __getitem__(self,key):
        return repr(key)

foo=Foo(range(10))
print(foo[1:5,1,2])
# (slice(1, 5, None), 1, 2)
Run Code Online (Sandbox Code Playgroud)