初学 python ,记录一下自己对 slicing 操作的理解。
1 | # 这里以 string 为例,当然,slicing 还支持 list,tuple。 |
关于 index:
在 python 中,index 可以是负数,-1 表示最后一个元素,-2 表示倒数第二个元素,以此类推。
1 | +---+---+---+---+---+ |
1 | # index 4和-1对应的都是'm' |
关于 slicing:
str[from:to] # 返回 [from,to) 的内容
1
2
3# 返回区间 [0,2) 的值
str[0:2]
'po'str[from:] # 等价于 str[from:None],返回 [from,len) 的内容
1
2
3# 返回区间 [2,末尾] 的值
str[2:]
'rum'str[:to] # 等价于 str[None:to],返回 [0,to) 的内容
1
2
3# 返回区间 [从头,2) 的值
str[:2]
'po'str[:] # 返回 [None, None) 的内容,其实就是 copy 一份
1
2
3# 返回 str 的拷贝
str[:]
'porum'str[from:to:step] # 表示从 from 开始取值,步长为 step,直到 to。同上,这里的 from to 为左闭右开区间,也均可省略。step 可正可负,但不可以是0。正数表示正序遍历,负数表示倒序遍历。
1
2
3
4
5#
str[::2]
'prm'
str[0:4:2]
'pr'再举一个 step 为负数的例子
1
2
3# 反转 porum
str[::-1]
'murop'
我们再看下面的例子:
1 | # [:1:-1] 等价于 [None:1:-1],因为 step 为负数,所以可以理解为是倒序取值,取到 index 为1的位置(exclude),因为 from 为 None,可以理解为从尾部开始。 |
1 | +---+---+---+---+---+ |
1 | # [2::-1] 等价于 [2:None:-1],从 index 为2的位置(include)倒序取值,一直到头部。 |
1 | +---+---+---+---+---+ |
反转操作我们还可以这样写:
1 | # 只要满足 from >= len-1, to < -len,都等价于 [::-1] |
1 | +---+---+---+---+---+ |