Ŀ¼
- 字符串操作
- 字符串运算符
- 字符串内置函数
- 字符串索引
- 字符串切片
- 在字符串切片过程中指定步幅
- 向字符串中插入变量
- 修改字符串
- 字符串内置方法
- bytes对象
- 定义bytes对象字面量
- 使用内置bytes()函数定义一个bytes对象
- bytes对象上的操作
- bytearray对象
- 结论
- 进群:125240963 即可获取数十套PDF或者零基础入门资料!
*运算符
* 运算符创建字符串的多个副本。如果s是一个字符串,n是一个整数,下面任何一种表达式都可以返回一个由n个s的副本所连接而成的字符串:
s * n
n * s
以下是两种形式的示例:
乘数操作数n必须是一个整数。你也许会认为它必须是一个正整数,但有趣的是,它可以是0或者负数,在这种情况下结果为空字符串。
如果你要创建一个字符串并通过 "foo" * -8 为其赋值将其初始化成为一个空字符串,所有人都会认为你有点蠢。不过这样做确实是有效的。
正如您在Python中的基本数据类型教程中所看到的一样,Python提供了许多内置于解释器并始终可用的函数。下面是一些可以作用于字符串的函数:
Unicode是一个雄心勃勃的标准,它试图在每个可能的平台上,对各种可能的语言,为每个可能的字符提供数字编码。 Python 3广泛支持Unicode,包括允许字符串中使用Unicode字符。
str(obj)
返回一个对象的字符串表示
事实上,Python中的任何对象都可以呈现为字符串。 str(obj)返回对象obj的字符串表示形式:
可以通过索引访问各个字符,如下所示:
尝试超出字符串末尾的索引会导致错误:
字符串索引也可以用负数指定,在这种情况下,索引在字符串中由后向前开始:-1指向最后一个字符,-2指向倒数第二个字符,依此类推。以下是显示字符串中正负索引的相同图表"foobar":
正数和负数索引
下面是一些负数索引的例子:
尝试使用超出字符串开头的负数进行索引会导致错误:
对于任何字符串s和任何整数n(0 ≤ n ≤ len(s)),s[:n] + s[n:]将等于s:
省略两个索引将完整地返回原始字符串。然而它不是原始字符串的副本,它是对原始字符串的引用:
如果切片中的第一个索引大于或等于第二个索引,则Python返回一个空字符串。如果你正在寻找一种另类的生成空字符串的方式,那么这是一种方法:
负数索引也可以与切片一起使用。-1表示最后一个字符,-2倒数第二个,依此类推,就像基本的索引一样。下图显示了如何使用正数索引和负数索引从字符串"foobar"中切割子字符串"oob":
正负索引在字符串切片中的使用
下面是对应的Python代码:
在字符串切片过程中指定步幅
还有一种切片语法的变形可以进行介绍。再添加一个参数:第三个参数指明步幅(也叫做步长),表明在切片中检索字符时每次跳过多少个字符。
例如,对于字符串"foobar",切片0:6:2以第一个字符开头,以最后一个字符(整个字符串)结束,并且每次跳过第二个字符。如下图所示:
带有步幅的字符串索引
类似的,1:6:2指定以第二个字符(索引1)开头并以最后一个字符结束的切片,并且步幅值再次为2导致每次都有一个字符被跳过:
另一个带有步幅的字符串索引
说明的REPL代码如下:
对于任何切片,可以省略第一个和第二个索引,并分别默认为第一个和最后一个字符:
您也可以指定负数步幅值,在这种情况下,Python会从后向前逐步处理字符串。在这种情况下,起始/第一个索引应该大于结束/第二个索引:
在上面的示例中,5:0:-2表示“从最后一个字符开始,每次后退2步,直到(但不包括)第一个字符”。
当您后退时,如果省略第一个和第二个索引,则以直观的方式反转默认值:第一个索引默认为字符串的结尾,第二个索引默认为开头。下面是一个例子:
下面是反转字符串的常见范例:
Python的三种引用机制中的任何一种都可用于定义f-string:
修改字符串
简而言之,你做不到。字符串是Python认为不可变的数据类型之一,意味着无法更改。实际上,到目前为止您看到的所有数据类型都是不可变的。(Python确实提供了可变的数据类型,您很快就会看到。)
在对象上调用方法的语法如下:
这将调用对象obj上的方法.foo()。<args>指定传递给方法的参数(如果有)。
稍后在面向对象编程的讨论中,您将探索有关定义和调用方法的更多信息。目前,我们的目标是介绍Python支持的一些常用的用于对字符串对象进行操作的内置方法。
在以下方法定义中,方括号([])中指定的参数是可选的。
大小写转换
本组方法对目标字符串执行大小写转换。
s.capitalize()
目标字符串首字母大写
s.capitalize()返回一个s的副本,第一个字符转换为大写,所有其他字符转换为小写:
非字母字符不变:
s.lower()
将字母字符转换为小写
s.lower()返回s中所有字母字符转换为小写的副本:
s.swapcase()
转换字母字符大小写
s.swapcase()返回一个s中大写字母字符转换为小写,小写字母转化为大写的副本:
s.title()
将目标字符串转化为单词首字母大写
s.title()返回s的一个副本,其中每个单词的第一个字母转换为大写,其余字母为小写:
该方法使用相当简单的算法。它并不试图区分重要和不重要的单词,而且它不能优雅地处理撇号,所有格或首字母缩略词:
s.upper()
将字母字符转化为大写
s.upper()返回s中所有字母字符转换为大写的副本:
查找和替换
这些方法提供了在目标字符串中搜索指定子字符串的各种方式。
该组中的每个方法都支持可选的<start>和<end>参数。这些参数在字符串切片时被解释:方法的操作仅限于目标字符串中从<start>位置字符开始到(不包括)<end>位置字符的部分。如果<start>被指定了但<end>没有,则该方法应用于目标字符串中从<start>开始直到字符串的末尾的部分。
s.count(<sub>[, <start>[, <end>]])
计算目标字符串中子字符串的出现次数
s.count(<sub>)返回字符串s中非重叠子串<sub>出现的次数:
计数被限制在由<start>和<end>所指定的子串内,如果参数被设定的话:
s.endswith(<suffix>[, <start>[, <end>]])
判断目标字符串是否以给定子字符串结尾
如果s以指定的<suffix>结尾,s.endswith(<suffix>)返回True,否则返回False:
判断被限制在由<start>和<end>所指定的子串内,如果参数被设定的话:
s.find(<sub>[, <start>[, <end>]]
在目标字符串中搜索给定的子字符串
s.find(<sub>)返回在s中找到子字符串<sub>的最小索引:
如果指定的子串没有找到,该方法返回-1:
检索被限制在由<start>和<end>所指定的子串内,如果参数被设定的话:
s.index(<sub>[, <start>[, <end>]])
在目标字符串中搜索给定的子字符串
这个方法与.find()功能相同,只是在查找不到<sub>时会产生一个异常而非返回-1:
s.rfind(<sub>[, <start>[, <end>]])
从末尾开始搜索目标字符串中的给定子字符串
s.rfind(<sub>)返回在s中找到子字符串<sub>的最大索引:
和.find()一样,如果指定的子串没有找到,该方法返回-1:
检索被限制在由<start>和<end>所指定的子串内,如果参数被设定的话:
s.rindex(<sub>[, <start>[, <end>]])
从末尾开始搜索目标字符串中的给定子字符串
这个方法与.rfind()功能相同,只是在查找不到<sub>时会产生一个异常而非返回-1:
s.startswith(<prefix>[, <start>[, <end>]])
判断目标字符串是否以给定子字符串开头
如果s以指定的<suffix>开头,s.startswith(<suffix>)返回True,否则返回False:
判断被限制在由<start>和<end>所指定的子串内,如果参数被设定的话:
字符分类
此组方法根据字符串包含的字符对字符串进行分类。
s.isalnum()
确定目标字符串是否由字母数字字符组成
如果s是非空的且其所有字符都是字母或数字,s.isalnum()返回True,否则返回False:
s.isalpha()
判断目标字符串是否由字母字符组成
如果s是非空的并且其所有字符都是字母,s.isalpha()返回True,否则返回False:
s.isdigit()
判断目标字符串是否由数字字符组成
如果s是非空的并且其所有字符都是数字,s.digit()返回True,否则返回False:
s.isidentifier()
判断目标字符串是否是有效的Python标识符
如果s根据语言定义是有效的Python标识符,s.isidentifier()返回True,否则返回False:
注意:与Python关键字匹配的字符串.isidentifier()将返回True,即使它实际上不是有效的标识符:
您可以调用iskeyword()函数测试字符串是否与Python关键字匹配,该函数包含在名为keyword的模块中。一种可能的方法如下所示:
如果你真的想确保一个字符串可以作为一个有效的Python标识符,你应该检查.isidentifier()是否为True以及iskeyword()是否为False。
请参阅 Python Modules and Packages―An Introduction阅读有关Python模块的更多信息。
s.islower()
判断目标字符串的字母字符是否为小写
如果s是非空的并且它包含的所有字母字符都是小写的,s.islower()则返回True,否则返回False。忽略非字母字符:
s.isprintable()
判断目标字符串是否完全由可打印字符组成
如果s为空或其包含的所有字母字符都是可打印的,s.isprintable()返回True。如果s包含至少一个不可打印的字符,则返回False。忽略非字母字符:
注意:如果s是空字符串,这是唯一个返回True的.isxxxx()方法。所有其它方法都对空字符串返回False。
未完待续,这人确实很负责。一个字符串的知识点!居然能写出这么全面!你值得这20K的月薪!