小编典典

如何通过切片符号a [::-1]解释序列的逆向

python

来自python.org教程

切片索引具有有用的默认值。省略的第一索引默认为零,省略的第二索引默认为要切片的字符串的大小。

>>> a = "hello"
>>> print(a[::-1])
olleh

正如教程所说,a[::-1]应该等于a[0:5:-1]

a[0:5:-1]为空,如下所示:

>>> print(len(a[0:5:-1]))
0

这个问题不是authentic-slice-
notation
的重复。这个问题与python中切片的一般用法有关。


阅读 194

收藏
2020-12-20

共1个答案

小编典典

我认为文档对此可能有点误导,但是切片的可选参数(如果省略)与使用相同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,对于取代的值Nonelen(a) - 1start-len(a) - 1end

>>> 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
2020-12-20