Python中的切片功能强大。但是切片很容易让人搞混。
个人觉得Python的文档不怎么好,好多东西都是零散的,更像教科书。
下面的参考来自Python3.2文档和Python参考手册(第4版):
可以看到,list的切片,内部是调用__getitem__,和slice函数。而slice函数又是和range()函数相关的。
range([start], stop[, step])
[start, start + step, start + 2 * step, ...]
真正让人迷惑的是list[start:stop:step]中的start和stop的默认值。
按《Python参考手册(第4版)》的说法:
如果不指定start和stop具体值
当step>0时,start和stop默认值是索引的开头
当step<0时,start和stop默认值是索引的结尾
我仔细再想下,发现有点不妥,a[::-1]又怎样解释?
我觉得step的符号表示一种方向的含义:
+:即从左向右看,所以start默认是0,stop默认是索引最大值
- :即从右向左看,所以start默认是索引最大值,stop默认是0
如:
Python3代码:
输出: