python切片-截取-逆序截取
一、切片简介
切片是python中的高级特性,Python的切片操作非常灵活强大、优雅简洁,如果能全面掌握和正确的运用,会对编写Python代码水平会有很大提升。
切片的基本语法格式如下:
常用的python切片操作如下:
str = '0123456789'
print(str[0:3]) # 截取第一位到第三位的字符 # 从1开始计数
print(str[:]) # 截取字符串的全部字符
print(str[6:]) # 截取第七个字符到结尾
print(str[:-3]) # 截取从头开始到倒数第三个字符之前 # 0123456
print(str[2]) # 截取第三个字符
print(str[-1]) # 截取倒数第一个字符
print(str[::-1]) # 创造一个与原字符串顺序相反的字符串
print(str[-3:-1]) # 截取倒数第三位与倒数第一位之前的字符 # 78
print(str[-3:]) # 截取倒数第三位到结尾
本文着重讲解python切片中,较难理解的部分之一:逆序截取。
二、切片编号
在切片中,针对字符串的字符或列表的元素进行编号,对切片的起始位置begin与截止位置end提供依据。
假设str = '0123456789′,字符串中每个字符的编号如下所示:
1. 当step>0时,位置编号为从左边的0为起点开始,往右依次递增(0,1,2,3,4,5...),如下图所示:
例:Str[2:6:1]
解析:从index=2开始,到index=6截止,左闭右开(包含2,不包含6),间隔为1取值切片。
等同于:str[2:6]
结果:2345
同理:
例:Str[2:6:2]
解析:从index=2开始,到index=6截止,左闭右开(包含2,不包含6),间隔为2取值切片。
结果:24
2. 当step<0时,位置编号为从右边的-1为起点开始,从右往左依次递减(...,-5,-4,-3,-2,-1),如图:
所以,当step<0时,如此:Str[2:6:-2] 的表达式为什么没有输出?因为此时的begin与end不在依次递减的范围内…
例:Str[::-1]
解析:没有begin与end, begin默认为0,end默认为-1,当step=-1时,即从右往左切取字符,逆序输出,完成字符串反转
结果:9876543210
三、逆序截取
依然假设:str = '0123456789’
1. print(str[:-6:-2])
解析:当begin无指定,end指定时(-6),在切取时不包含index=end的元素!对应关系如下图:
Step=-2<0,即逆序从右往左,以end为终点,step为2切取字符。
结果:975
2. print(str[:-6:2])
解析:当begin无指定,end指定时(-6),在切取时不包含index=end的元素!对应关系如下图:
Step=2>0,即正序从左往右,以end为终点,step为2切取字符。
结果:02
注意:输出不是024!因为此时切取时不包含index=end的元素!
3. print(str[-6::-2])
解析:当begin指定(-6),end无指定时,在切取时包含index=begin的元素!对应关系如下图:
Step=-2<0,即逆序从右往左,以begin为起点,step为2切取字符。
结果:420
4. print(str[-6::2])
解析:当begin指定(-6),end无指定时,在切取时包含index=begin的元素!对应关系如下图:
Step=2>0,即正序从左往右,以begin为起点,step为2切取字符。
结果:468
总结:
对于python切片截取,一般情况下都容易分析与理解,当遇到较为复杂的逆序截取时:
首先,根据begin或end,找到切取起点或终点;
其次,查看step,分析切取是从左往右还是从右往左;
第三,当指定begin,不指定end时,切取时包含index=begin的字符,根据step向左或向右切取字符;
当指定end,不指定begin时,切取时不包含index=end的字符,根据step从左或从右,向中间切取字符。
参考链接:
因篇幅问题不能全部显示,请点此查看更多更全内容