关于 Python 字符串切片的小领悟
1. 什么是 Python 字符串切片?
例如存在字符串 str2 = “abcd1234"
,有以下简单的切片应用。
str2[0] # a
str2[0:3] # abc
str2[0:6:2] # ac1
有 3 种形式的切片:
- string[index]: 获取字符串特定下标字符
- string[start, stop]: 获取从 start 坐标到 stop 坐标的字符串,注意左闭右开,既 [start, stop) 范围坐标的字符串
- string[start, stop, step]: 获取从 start 坐标到 stop 坐标的字符串,且一次提取间隔为 step
上面都是一些基础的应用,在此之上,还有高级的特性:
- 坐标为空则默认(提取方向的)开头或者结尾,步级(step)为空则默认为1
- 不管是坐标还是步级(step),都支持正负数
例如有以下高级应用:
str2[1::2] # bd24
str2[:-1:1] # abcd123
特性1 比较好理解,但特性2 的存在让字符串切片存在更多的玩法,但也让切片更难理解。
小领悟就是关于怎么理解这高级的切片功能,让我们看着代码就可以知道其切片结果。
2. 切片的理解
2.1 切片的基础概念
以最复杂最完整的第三种切片方法 string[start, stop, step]
为例,start,stop 划定了切片的范围,如下图:
step 确定了在范围内 挑选 的跨度,以 step = 2 为例,如下图:
2.1 坐标正负的含义
如上图所示,
- 以正数表示坐标,则坐标是从左到右,从 0 开始计数
- 以负数表示坐标,则坐标是从右到左,从 -1 开始计数
- 0 不分正负,不管正坐标还是负坐标,都规定 0 恒指向左边第一个元素
因此字符串中每一个元素都至少有2个坐标可以表示。以字符 d
为例,其坐标既可以是 3,也可以是 -5,因此 str2[3]
和 str2[-5]
指向同一个字符,他们是等效的。
print(str2[3] is str2[-5]) # True
这个等效的概念很重要,正因为这个概念,start、stop 可以是正负任意的组合,例如:
str2[2:5] # cd1
str2[-6:-3] # cd1
str2[-6:5] # cd1
str2[2:-3] # cd1
上面的 4 中写法是完全等效的,不管 start 是 2 还是 -6 都指向 ‘c’,不管 stop 是 5 还是 -3 都指向 ‘2’。
2.2 步级正负的含义
在一定的条件下,我们可以理解为 start + step 就是下一个切片的元素坐标。
以 str2[1:6:2]
为例,如下图:
为什么是一定条件下才成立呢?例如切片:str2[-7:6:2]
,如果按 start + step 的计算,[-7, 6) 之间的坐标数据全乱了。
- 正确坐标:1,3,5
- 错误坐标:-7, -5, -3, -1, 1, 3,5
所以,如果按 start + step 的计算前提,应该是 start 和 stop 坐标 同为正数或者负数,同样以 str2[-7:6:2]
为例,坐标 -7 元素对应的正坐标是 1,等效于 str2[1:6:2]
,或者 str2[-7:-2:2]
,此时通过 start + step 的计算可以获取正确的切片提取坐标。
总的来说:正的步级表示从左往右,负的步级表示从右往左,从 start 到 stop 按步级正负指定的方向提取。
2.3 特殊切片结果的理解
基于上面的理解,同样以 str2 = "abcd1234"
为例,我们试着分析以下的切片。
2.3.1 str2[::-1]
- 步级为负数,表示提取方向从右到左
- 步级为1,表示每跨步1个元素提取
- start 为空,则默认为字符串提取方向的最开始
- end 为空,则默认为字符串提取方向的最后
因此最终结果如下,起到个倒序的效果:
print(str2[::-1]) # 4321dcba
2.3.2 str2[0:6:-1]
- 步级为负数,表示提取方向从右到左
- 步级为1,表示每跨步1个元素提取
- start 为 0,stop 为 6
start 元素在 stop 元素的左边,但提取方向却是从右到左,无法切片,因此最终结果为空字符串。
这样 [0:6:-1] 的写法当然是不合理的,这只是在我尝试理解切片过程中随机做的一些实验
2.3.3 str2[2:-1:2]
- 步级为正数,表示提取方向从左到右
- 步级为2,表示每跨步2个元素提取
- start为2,从元素 'c' 开始
- stop 为-1,表示元素'4',用正数表示坐标则为 7
转换后坐标从 [2, 7),步级为2,因此结果为:
print(str2[2:-1:2]) # c13
小结
只是一点小小理解和领悟,就不特意总结了,各位看官自己理解即可。
关于 Python 字符串切片的小领悟的更多相关文章
- Python字符串切片操作知识详解
Python字符串切片操作知识详解 这篇文章主要介绍了Python中字符串切片操作 的相关资料,需要的朋友可以参考下 一:取字符串中第几个字符 print "Hello"[0] 表 ...
- DAY3(PYTHON)字符串切片
字符串调整: capitalize() #首字母大写 upper() #全大写 lower() #全小写 swapcase() #大小写翻转 字符串切片: 顾头不顾尾!!! ...
- Python字符串切片
1.字符串切片:从字符串中取出相应的元素,重新组成一个新的字符串 语法: 字符串[ 开始元素下标 : 结束元素下标 : 步长 ] # 字符串的每个元素都有正负两种下标 步长: ...
- Python 字符串切片
#-*- coding:utf-8 -*- #字符串切片 names = "abcdefgh" ''' 切片语法 names[起始位置:终止位置:步长] 起始位置:即字符串的下标, ...
- python 字符串 切片
####################概念######################''' int 整数 str 字符串 一般不存放大量的数据 bool 布尔值,用来判断. True,False ...
- python字符串和列表小案例
python 目录 python 一.字符串 1.给定一个字符串,利用切片将字符串反转 2.给定一个字符串,将空格替换为逗号 3.给定一个字符串,大写改为小写 4.str = '' ,li = ['l ...
- python 字符串切片知识巩固
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...
- Python 字符串切片(slice)
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...
- [编程基础] Python字符串替换笔记
Python字符串替换笔记 Python字符串替换笔记主要展示了如何在Python中替换字符串.Python中有以下几种替换字符串的方法,本文主要介绍前三种. replace方法(常用) transl ...
- python学习第四天 --字符编码 与格式化及其字符串切片
字符编码 与格式化 第三天已经知道了字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采 ...
随机推荐
- SpringBoot对接阿里云OSS上传文件以及回调(有坑)
前言 今天在对接阿里云OSS对象存储, 把这过程记录下来 链接 阿里云的内容很多,文档是真的难找又难懂 本文主要是用的PostObject API 加上 Callback参数 PostObject - ...
- 如何制作 GitHub 个人主页
人们在网上首先发现你的地方是哪里?也许你的社交媒体是人们搜索你时首先发现的东西,亦也许是你为自己创建的投资组合网站.然而,如果你使用GitHub来分享你的代码并参与开源项目,那么你的GitHub个人主 ...
- go select 使用总结
转载请注明出处: 在Go语言中,select语句用于处理多个通道的并发操作.它类似于switch语句,但是select语句用于通信操作,而不是条件判断.select语句会同时监听多个通道的操作,并选择 ...
- JNI c++ 与 java 通信过程
JNI(Java Native Interface)是Java提供的一种机制,用于在Java和本地C/C++代码之间进行通信.下面是JNI C++与Java通信的一般过程: 1. 编写Java代码:首 ...
- 【问题解决】docker版本v23.0后,构建Dockerfile中FROM私库镜像报错构建失败
问题情况 Docker版本在v23.0以后,只要Dockerfile中FROM的私库镜像不存在本地,就会报错: # 我本地是v24.0.2版本Docker [root@localhost ipd]# ...
- [爬虫]3.4.1 Scrapy框架的基本使用
Scrapy是一款强大的Python网络爬虫框架,它可以帮助你快速.简洁地编写爬虫程序,处理数据抓取.处理和存储等复杂问题. 1. 安装Scrapy 在开始使用Scrapy之前,你需要先将其安装在你的 ...
- mysql8数据转移到mysql5
源MySQL版本:8.0.20 目标MySQL版本:5.7.19 使用mysqldump.mysqlpump等工具备份源数据库的数据为sql文件 将sql文件里的utf8mb4_0900_ai_ci ...
- AWD-PWN流量监控与抄流量反打
RE手 在AWD中比较做牢,队伍里也没pwn手,在awd出现pwn靶机比较坐牢.之前都不知道pwn靶机可以抄流量反打. 参考pwn_waf:https://github.com/i0gan/pwn_w ...
- 1.JDK的安装与卸载
1.卸载: 卸载或更改程序,找到相应的JDK程序,删除 2.安装: 官网下载JDK程序:jdk-8u25-windows-i586.exe 双击安装程序,同意协议,更改安装路径:C:\jdk1.8.0 ...
- 微信小程序上传文件操作示范
社会实践心得体会格式要求 提交的心得体会应为word文档,且图文并茂,全文段前.段后0,1.5倍行距. 题目:自拟,方正小标宋简体,小二号,加粗,居中. 个人信息:题目下方,宋体,小四号,加粗,居中, ...