来自python.org教程
切片索引具有有用的默认值。省略的第一索引默认为零,省略的第二索引默认为要切片的字符串的大小。
>>> a = "hello" >>> print(a[::-1]) olleh
正如教程所说,a[::-1]应该等于a[0:5:-1]
a[::-1]
a[0:5:-1]
但a[0:5:-1]为空,如下所示:
>>> print(len(a[0:5:-1])) 0
这个问题不是authentic-slice- notation的重复。这个问题与python中切片的一般用法有关。
我认为文档对此可能有点误导,但是切片的可选参数(如果省略)与使用相同None:
None
>>> a = "hello" >>> a[::-1] 'olleh' >>> a[None:None:-1] 'olleh'
您可以看到上述两个切片与CPython字节码相同:
>>> import dis >>> dis.dis('a[::-1]') # or dis.dis('a[None:None:-1]') 1 0 LOAD_NAME 0 (a) 3 LOAD_CONST 0 (None) 6 LOAD_CONST 0 (None) 9 LOAD_CONST 2 (-1) 12 BUILD_SLICE 3 15 BINARY_SUBSCR 16 RETURN_VALUE
对于负step,对于取代的值None是len(a) - 1为start和-len(a) - 1为end:
step
len(a) - 1
start
-len(a) - 1
end
>>> a[len(a)-1:-len(a)-1:-1] 'olleh' >>> a[4:-6:-1] 'olleh' >>> a[-1:-6:-1] 'olleh'
这可以帮助您可视化它:
h e l l o 0 1 2 3 4 5 -6 -5 -4 -3 -2 -1