python切片-截取-逆序截取

版权声明:本文为作者原创文章,欢迎转载,但是得在头部或者尾部等明显地方注明出处留下链接地址! https://blog.csdn.net/HeyShHeyou/article/details/82665453

一、切片简介

切片是python中的高级特性,Python的切片操作非常灵活强大、优雅简洁,如果能全面掌握和正确的运用,会对编写Python代码水平会有很大提升。

切片的基本语法格式如下:

str[begin:end:step]

str: 字符串或列表。

begin: 切片的起始位置。默认为0

end: 切片的截止位置。默认为-1,且包含-1

step: 切片的间隔。step不能为0。默认为1

截取的区间为左闭右开

step > 0,表示从左往右切取内容;

step < 0,表示从右往左切取内容;

常用的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从左或从右,向中间切取字符。

 

参考链接:

https://blog.csdn.net/win_turn/article/details/52998912

 

猜你喜欢

转载自blog.csdn.net/HeyShHeyou/article/details/82665453
今日推荐