《手把手陪您学Python》8——字符串的切片

​在上一篇《手把手陪您学Python》7——字符串的索引中,我们初步了解了字符串的位置索引方法。之所以把索引和切片分开两篇写,上一篇也说了,是为了把切片的方式和规则能够讲的更清楚,有助于我们应对未来在不同的数据结构上,应对更复杂的切片方式。

简单来说,一个索引对应的是一个内容(字母、数字、符号等),而切片对应的则是一段内容。

与索引的单一位置表示不同,切片有一个基本的语法表达式:

object[start_index:end_index:step]

这个object,可以是我们正在讲的字符串,也可以是我们以后要讲到的列表、数组、DataFrame等等。从这就可以看出来,他们的切片方式是一样的,所以一定要把基本功学扎实。

star_index和end_index代表着切片的起点和重点,与我们上一篇说到的从左往右数和从右往左数,并不完全相同,具有高的灵活性。需要特别强调的是,end_index是不包括在内的,类似数学中左闭右开的概念。

例如,str[0:5],代表的是字符串从左往右数第0、1、2、3、4,一共5个位置对应的内容,但是不包括end_index为5这个位置对应的内容。

在此处还有一个规则,就是遇到包含头或者包含尾的切片时,头尾的索引位置可以忽略不写,那么str[0:5]就可以写为str[:5],str[-10:-1]就可以写为str[:-1]。

但是str[-5:-1]和str[-5:]是不一样的,前者是不包括-1这个位置的,但是后者是包括的,也就是一直到字符串的最后一个字符(后面有示例)。

聪明如你,如果要把整个字符串都选上,就可以写成str[:]了。

step是切片时每个取样的间隔步长,也就是每多少个值取一个值,默认是1。当我们不输入这个参数的时候,都是按照从左往右每一个值取一个值,也就是连续取值的意思。

step参数对于切片来说非常重要,因为它不仅决定了取值的步长,还决定了取值的方向。

当step为正数时,切片是从左往右取值的,同时也就要求star_index和end_index的位置也是从左到右的,也就是起点位置要在终点位置的左边。

当step为负数时,切片是从右往左取值的,同时也就要求star_index和end_index的位置也是从右到左的,也就是起点位置要在终点位置的右边。

无论位置索引是正数还是负数,甚至是正负数混合的,只要让起点位置、终点位置、步长的正负值,满足上面的要求就可以。

如果不满足,虽然不会报错,但是会返回空字符串。

为了更直观地说明上述规则,画了下面这张示例图,并用一个字符串进行举例,对上面比较晦涩的定义进行解释。

考虑这个最简单的字符串,str = '0123456789'。它的值和从左往右的位置索引是一样的,可以让我们更清楚地看到切片结果。

当step=1时:(默认值,可以写出来也可以不写出来,这里按照惯例不写出来)

In [1]: str = '0123456789'
 
In [2]: str[0:5]   # 起点、终点均为正值
Out[2]: '01234'
​
In [3]: str[-5:-1]   # 起点、终点均为负值
Out[3]: '5678'
​
In [4]: str[-5:]   # 起点为负值,终点省略,可以取到字符串最后一个值
Out[4]: '56789'
​
In [5]: str[2:-6]   # 起点为正值,终点为负值
Out[5]: '23'
​
In [6]: str[-8:6]   # 起点为负值,终点为正值
Out[6]: '2345'
​
In [7]: str[8:3]   # 起点在终点右侧
Out[7]: ''
​
In [8]: str[-2:-8]   # 起点在终点右侧
Out[8]: ''
​
In [9]: str[8:-10]   # 起点在终点右侧
Out[9]: ''
​
In [10]: str[-1:8]   # 起点在终点右侧
Out[10]: ''
​
In [11]: str[-1:9]   # 起点和终点一个位置,但终点不包括在内
Out[11]: ''

当step=-1时:

In [12]: str[8:3:-1]   # 起点、终点均为正值
Out[12]:'87654'
​
In [13]: str[-2:-8:-1]   # 起点、终点均为负值
Out[13]:'876543'
​
In [14]: str[8:-10:-1]   # 起点为正值,终点为负值
Out[14]: '87654321'
​
In [15]: str[8::-1]   # 起点为正值,终点省略,可以取到字符串第一个值
Out[15]: '876543210'
​
In [16]: str[-1:8:-1]   # 起点为负值,终点为正值
Out[16]: '9'
​
In [17]: str[0:5:-1]   # 起点在终点左侧
Out[17]: ''
​
In [18]: str[-5:-1:-1]   # 起点在终点左侧
Out[18]: ''
​
In [19]: str[2:-6:-1]   # 起点在终点左侧
Out[19]: ''
​
In [20]: str[-8:6:-1]   # 起点在终点左侧
Out[20]: ''
​
In [21]: str[-1:9:-1]   # 起点和终点一个位置,但终点不包括在内
Out[21]: ''

上面用20条语句遍历了起点、终点和步长的不同正负号的组合情况,以及最终的结果。

每条语句后的“#”是注释符,是为了说明语句的含义,不会对运行造成影响。

可能最开始看到会觉得有点晕,请大家耐心地逐一验证,如果还有其他在上例中没有涉及到的情景,也请大家自己进行测试。

如果大家能够靠自己计算,能得到同样正确的结果,那么恭喜大家,说明大家这部分的知识就已经很扎实了,足以能够很好地应对后面将会学到或者遇到的任何情景了。

上面的示例讲的都是连续切片的情况,也就是step=1或者-1。如果改变step的值,就可以实现不连续切片了。

In [22]: str[0:5:2]
Out[22]: '024'
​
In [23]: str[-5:0:-3]
Out[23]: '52'

到这里,字符串的切片也讲完了,可能这是我们学习Python以来,遇到的第一个比较绕的主题,但概念应该并不复杂,只要大家能够耐心自己算几次就会很熟悉了。

 

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

欢迎扫描下方二维码,关注“亦说Python”公众号,阅读《手把手陪您学Python》系列文章的其他篇目,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

For Fans:关注“亦说Python”公众号,回复“手8”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值