社科大数据平台Python学习系列 | Python 字符串操作(上)
目录
一、前言
二、字符串的运算
1. 字符串连接
2. 字符串复制
3. 字符串成员运算
三、字符串转义符
四、字符串切片
1. 字符串索引
2. 六大案例
五、总结
本文共3927个字,阅读大约需要12分钟,欢迎指正!
Part1前言
上期文章,我们详细介绍了Python 基本数据类型,包括数字和字符串,文中着重介绍了 Python 中字符串的表示方法。
事实上,Python 中字符串的使用极其频繁,无论是微观数据,还是统计数据,大多数有效信息都被存储为字符型,即使是一部分数据是数字,在处理过程中可能也要将其转为字符型。所以字符串处理手段十分重要,本期文章我们就来介绍一下 Python 字符串的基本操作。
Part2字符串的运算
类似于数字之间的运算,字符串也存在运算操作。不过常用的字符串运算方式非常少,只有连接(加法)、复制(乘法)和成员运算。
1字符串连接
字符串的连接运算只存在于字符串与字符串之间,即字符串与字符串连接(字符串与数字或其他类型之间无法进行连接运算)。进行连接运算时,使用加号 +
将两个字符串连接起来,所以我们也可以称之为字符串相加。示例代码如下:
'Python ' + 'is fine'
# 得到:'Python is fine'
'我的' + '爱好' + '是学习'
# 得到:'我的爱好是学习'
2字符串复制
字符串的复制运算只存在于字符串与整数之间,例如 'Python' * n
,表示 n 个 'Python'
连接在一起。如果乘数 n
是负整数或者 0,运算的结果将会是空字符串 ''
。空字符串 ''
乘以任何整数都将得到其本身——即空字符串。示例代码如下:
'Python' * 3
# 得到:'PythonPythonPython'
'Python' * 0
# 得到:''
'Python' * -2
# 得到:''
'' * 100
# 得到:''
3字符串成员运算
成员运算是 Python 字符串中使用最频繁的运算方式,主要功能是判断一个字符串是否出现在另一个字符串中,共有有两种运算方式 in
和 not in
。运算的结果不是字符串,而是布尔值(True
或者 False
),表示一种真与假,或者成立与不成立的状态。这里不再用过多语言来解释了,因为看代码会更便于理解:
'我爱' in '我爱学习'
# 得到:True 说明表达式成立
'我爱' not in '我爱学习'
# 得到:False 说明表达式不成立
'我学习' in '我爱学习'
# 得到:False 说明表达式不成立
'我学习' not in '我爱学习'
# 得到:True 说明表达式成立
'' in '我爱学习'
# 得到:True 空字符串包含在任意字串中, 包括空字符串本身
'' not in ''
# 得到:False
最后,以上三种运算的优先级为:复制运算 > 连接运算 > 成员运算。
Part3字符串转义符
在 Python 中经常会使用字符串存储一些奇怪的字符,比如换行符、制表符等常规字符串不方便表示的字符;或者需要保留字符原本的含义。此时需要用反斜杠 \ 来转义字符,以便于表示特殊字符或字符本身。其中常用的转义字符如下表所示:
转义符的使用方式代码如下图所示:
Part4字符串切片
在 Python 中可以使用切片截取字符串中的一部分字符。比方说,我需要截取字符串"ABCDEFG
"中的第 2 ~ 6 的字符,即 "BCDEF
",这时我们就需要使用字符串切片(slice)来截取字符串的某一部分。
1字符串索引
字符串切片是完全依赖于字符串索引的,所以介绍字符串切片之前需要先介绍字符串索引。索引是序列类数据的一种重要属性,在 Python 的学习过程中,认识并掌握索引是一个具有重大意义的事情。下面我们正式介绍字符串索引。
字符串索引,用白话来说,就是字符串中每一个字符(包括空格,但不包括转义符)的顺序标记。类似于我们日常所说的序号。在 Python 中存在两种索引方式。一种是正序索引,另一种是逆序索引。两种索引共同作用在同一个序列上(字符串也是一种序列)。举例图解,字符串"r.qiyandata.com
"的索引如下图所示:
上图中上面一行蓝色数字是字符串 "r.qiyandata.com
" 的正序索引,正序索引自左向右(自前向后)从 0
开始递增,正序索引值为连续的非负整数,且不含重复值。下面一行蓝色数字是逆序索引,逆序索引自右向左(自后向前)从 -1
开始递减,逆序索引的值为连续的负整数,也不含重复值。
了解字符串的索引之后,就可以继续学习字符串切片了。我们先使用 Python 定义一个字符串,代码如下:
S = "r.qiyandata.com" # 将字符串 "r.qiyandata.com" 赋值给变量 S
print(S) # 输出变量 S
# 输出:r.qiyandata.com
在字符串中可以通过方括号[]
来获取相应索引位置或范围内的字符,这就是字符串切片。切片共有三个参数,三个参数分别是 start、stop 以及 step,分别表示起始索引,终止索引和步长。三者使用冒号:
分隔开。表示从左向右截取字符串中索引从 start(包含 start 本身,默认值为 0)到 stop (不包含 stop 本身,默认值为字符串长度,如果使用了默认值,则包含字符串最后一个字符),步长为 step (默认值为 1)的字符。
[start:stop:step]
重点在于从 start 到 stop 是一个左闭右开区间[start,stop)
。理解上面这段话需要一点时间,笔者下面使用代码帮助你体会其中的含义。
2案例
案例一
需要截取 S("r.qiyandata.com"
) 中的 "qiyandata"
。示意图和切片代码截图如下:
从上面的代码中已经可以看出索引的使用非常灵活。我们注意到,上面四种切片方式使用的步长均为 1(step 的默认值就是 1),这种情况下我们可以直接省略 step 参数。仅使用 start 和 stop 即可。代码如下图所示:
案例二
截取字符串 S 中的前 7 个字符,示意图和切片代码截图如下:
观察上面的示意图可以发现,无论使用正序索引还是逆序索引,start 参数指向的都是 S 中索引为 0 的字符 r,也就是说 start 的值(0、-15)全部等价于默认值 0。此时我们可以省略 start 参数,让其使用默认值。省略 start 参数后的代码如下图所示:
这里需要注意,不同于省略步长 step,省略 start 时,start 与 stop 之间的冒号不能省略,只有保留冒号,系统才知道你省略的是 start。否则 Python 无法判断你的意图。
案例三
需要截取字符串 S 中的最后四个字符,示意图和切片代码截图如下:
以上代码中有几处需要注意的地方。
首先,第一行代码中,正序索引 15 实际上是不存在的,但是由于我们的目的是获取最后 4 的字符,所以这里的 stop 只要是大于最后一个字符
m
的正序索引14
的正整数即可。比如:同理,当需要获取字符串的前几个字符时,将 start 设置为小于等于(因为是左闭右开)首个字符 r 的逆序索引 -15 的负整数即可,代码如下图所示:
其次,由于
[start,stop)
为左闭右开区间,即不包含索引为 stop 的字符,所以切片代码S[-4:-1]
并没有获取到最后四个字符中最后一个字符m
。后面我们使用切片代码S[-4:]
省略了 stop 参数,此时最后一个字符也被包含其中,也就达到了我们的目的。
案例四
从字符串 S 的首个字符开始,直到最后一个字符结束,每隔一个字符获取一个字符。示意图和切片代码如下:
可如果步长 step 设置为负数 -1
,会发生什么呢?继续往下看
案例五
将字符串 S 反转,通俗地说,就是把 "r.qiyandata.com
" 倒着写。这次没有示意图了,代码如下:
需要注意的是,当步长 step 设置为负数时,字符产切片是从右向左(从后向前)来截取字符串的。此时切片将会从后向前从 start 开始(包含 start)到 stop 结束(不包含 stop 本身),并配合步长 step 来完成切片。比如我想要截取 S 的最后四个字符并要求字符顺序是反过来的,示意图如下:
那么我们可以使用下图所示代码完成操作:
案例六
需要截取字符串 S 中的某一个字符,比如说第 6 个字符(由于索引从 0 开始,第六个字符的索引就是 5)。
按照上面的逻辑,我们当然可以使用下面的代码来处理:
不过上面这种方式太麻烦了,我们直接使用所需字符的索引即可,代码如下图所示:
以上六个分别介绍了 Python 中字符串的切片操作。追求实用性的读者可以只看案例一、案例二、案例三和案例六,会更好理解一些。
Part5结束语
本期文章我们详细介绍了 Python 中字符串的三种运算、Python 序列的索引以及通过索引实现的字符串切片。这是在学习 Python 的过程中首次接触到索引的一节,重要性不言而喻。初学字符串切片时会觉得比较麻烦,记不住,这是正常的现象,因为这是一个难点,也是一个重点。
下期文章我们将继续介绍 Python 字符串的其他操作,内容相对本期而言会简单不少,也会更加有趣。
我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 两米哥
欢迎扫描👇二维码添加关注