摘要:关于python切片的一些个人理解

首先声明一个list

a = ["p","y","t","h","o","n"]

切片的基本形式为:

a[start:stop:step]

python切片1.jpg

  • 当step索引默认为1或者指定为1时

    start是起始位置,默认值为0

    stop是终点位置,默认值为len(a)+1

  • 当step索引指定为-1时

    start是起始位置,默认值为len(a)+1

    stop是终点位置,默认值为0

当start,stop为正值的情况

>>> a = ["p","y","t","h","o","n"]
>>> a[0:1]
['p']
>>> a[0:3]
['p', 'y', 't']
>>> a[0:3:1]
['p', 'y', 't']
>>> a[0:3:]
['p', 'y', 't']

可以看到先取a[start],然后取a[start+step],然后取a[start+step+step]
因为a[start+step+step+step]等于stop所以取值停止。

当start,stop为负值的情况

例一:

>>> a[-6:-3:1]
['p', 'y', 't']
>>> a[0:3:1]
['p', 'y', 't']
>>> a[-6:3:1]
['p', 'y', 't']

可以看到 a[-6:-3:1] 以及 a[-6:3:1] 和 a[0:3:1] 结果一模一样,参照上面的对照表,确实-6位置对应的0,-1位置对应的-1;可以认为python会将负值转化为正值,比如a[-6:3:1],a[-6:-3:1] 转化为 a[0:3:1] 然后输出

当指定step为负值时

例一:

>>> a[-1:0:-1]
['n', 'o', 'h', 't', 'y']
>>> a[5:0:-1]
['n', 'o', 'h', 't', 'y']

可以理解为:
a[-1:0:-1]转化为a[5:0:-1],然后依次取a[start],a[start+step],然后a[start+step+step],然后a[2],a[1]。这个时候start+step+step+step+step+step等于stop,停止取值。