- Python机器学习原理与算法实现
- 杨维忠 张甜
- 2568字
- 2025-02-25 10:48:10
1.10 Python字符串
在编写代码的过程中,可能经常需要对字符串进行处理,包括拼接字符串、计算字符串长度、截取字符串、分割字符串、检索子字符串、字母大小写转换、去除空格或特殊字符、格式化等。
1.拼接字符串
拼接字符串通过“+”来实现。示例如下,输入以下代码并逐行运行:
str1='对酒当歌,' # 生成字符串str1 str2='人生几何' # 生成字符串str2 str3=str1+str2 # 将字符串str1和字符串str2拼接,生成字符串str3 str3 # 查看字符串str3。运行结果为:'对酒当歌,人生几何'。
2.计算字符串长度
计算字符串长度可调用len()函数。在Python中,数字、英文、小数点、下划线、空格各占1字节,1个汉字可能占2~4字节(取决于编码格式)。比如输入以下代码并运行:
len(str3)#计算字符串str3的长度。运行结果为:9
3.截取字符串
截取字符串的语法格式为:
stringname[start:end:step]
其中,stringname表示被截取的字符串,start表示截取的第一个字符的索引(包括该字符,如果不指定则默认为0),end表示截取的最后一个字符的索引(不包括该字符,如果不指定则默认为字符串的长度),step表示切片的步长(如果不指定则默认为1,而且可以省略最后一个冒号)。示例如下,输入以下代码并逐行运行:
str4=str3[2:7:2] # 从字符串str3截取生成字符串str4 str4 # 查看字符串str4。运行结果为:'当,生'
4.分割字符串
分割字符串的语法格式为:
stringname.split(sep,maxsplit)
其中,stringname表示被分割的字符串对象;sep用于设置分隔符(可以包含多个字符,如果不设置则默认为所有空字符,包括空格、换行符\n、制表符\t等);maxsplit用于指定分割的最大次数,返回结果列表的元素个数最多为“maxsplit+1”,如果不设置或指定为-1,则分割次数没有限制。示例如下,输入以下代码并逐行运行:
str5='对酒当歌 人生几何 譬如朝露 去日苦多' # 生成字符串str5 str5.split() # 对字符串str5采用默认设置进行分割。运行结果为:['对酒当歌', '人生几何', '譬如朝 露', '去日苦多']
5.检索字符串
检索字符串的方法包括count()、find()、index()、startswith()、endswith()等。
(1)count()用来检索指定子字符串在另一个字符串中出现的次数(包括0次)。find()用来检索指定子字符串在另一个字符串中是否存在,如果存在则返回首次出现该字符串的索引,如果不存在则返回-1。index()与find()的作用相同,也是检索指定子字符串在另一个字符串中是否存在,如果存在则返回首次出现该字符串的索引,但如果不存在则会直接报错“substring not found”而不是返回-1。它们的基本语法格式分别为:
stringname.count(sub[,start[,end]]) stringname.find(sub[,start[,end]]) stringname.index(sub[,start[,end]])
其中,stringname表示被检索的字符串,sub表示需要检索的子字符串,start为检索的起始位置的索引(也可不指定,默认从头开始检索),end为检索的结束始位置的索引(也可不指定,默认一直检索到字符串末尾)。
(2)startswith()和endswith()分别用于检索字符串是否以指定的子字符串开头或结尾,如果是则返回True,如果不是则返回False。它们的基本语法格式分别为:
stringname.startswith(sub[,start[,end]]) stringname.endswith(sub[,start[,end]])
其中,stringname表示被检索的字符串,sub表示需要检索的子字符串,start为检索的起始位置的索引(也可不指定,默认从头开始检索),end为检索的结束始位置的索引(也可不指定,默认一直检索到末尾)。示例如下,输入以下代码并逐行运行:
str5='对酒当歌 人生几何 …… 何以解忧 唯有杜康' # 生成字符串str5 str5.count('何') # 检索字符串str5中出现子字符串'何'的次数 str5.find('何') # 检索字符串str5中是否存在子字符串'何' str5.find('短歌行') # 检索字符串str5中是否存在子字符串'短歌行' str5.index('何') # 检索字符串str5中是否存在子字符串'何' str5.index('短歌行') # 检索字符串str5中是否存在子字符串'短歌行' str5.startswith('对') # 检索字符串str5是否以指定的子字符串'对'开头 str5.startswith('康') # 检索字符串str5是否以指定的子字符串'康'开头 str5.endswith('对') # 检索字符串str5是否以指定的子字符串'对'结尾 str5.endswith('康') # 检索字符串str5是否以指定的子字符串'康'结尾
运行结果如图1.53所示。

图1.53 运行结果
6.字母大小写转换
就是将大写字母转换为小写字母或将小写字母转换为大写字母,方法包括lower()和upper()。它们的基本语法格式分别为:
stringname.lower() stringname.upper()
其中stringname为字符串对象。示例如下,输入以下代码并逐行运行:
str6='ABCdefg' # 生成字符串str6 str6.lower() # 将字符串str6中的所有字母都降为小写 str6.upper() # 将字符串str6中的所有字母都升为大写
运行结果如图1.54所示。

图1.54 运行结果
7.去除空格或特殊字符
在很多情况下,Python不允许字符串的前后出现空格或特殊字符,这时可以调用strip()、lstrip()和rstrip()去除这类字符。其中,strip()可以去除字符串左右两侧的空格或特殊字符,lstrip()可以去除字符串左侧的空格或特殊字符,rstrip()可以去除字符串右侧的空格或特殊字符。它们的基本语法格式分别为:
stringname.strip([chars]) stringname.lstrip([chars]) stringname.rstrip([chars])
其中,stringname为字符串对象,chars用于设置需去除的空格或特殊字符(可以包含多个字符,如果不设置则默认为所有空字符,包括空格、换行符'\n'、回车符'\r'、制表符'\t'等)。示例如下,输入以下代码并逐行运行:
str7=' ABCdefg ' # 生成字符串str7 str7.strip() # 去除字符串str7左右两侧的空格或特殊字符 str7.lstrip() # 去除字符串str7左侧的空格或特殊字符 str7.rstrip() # 去除字符串str7右侧的空格或特殊字符
运行结果如图1.55所示。

图1.55 运行结果
8.格式化字符串
格式化字符串首先要制定一个模板,在模板中预留出位置,然后根据需要进行填充。格式化字符串采用的是format()方法,它的基本语法格式为:
stringname.format(args)
其中,stringname为格式化字符串对象,format用于指定字符串的显示样式,args用于指定需要转换的项,如果项数为多个,则项之间用逗号分隔。
格式化字符串需要创建模板,要用到“:”和“{}”来控制字符串的操作,基本语法格式为:
{[index][:[fill]align[sign][#][width][.precision][type]]}
其中,index为可选参数,用于指定要设置的对象格式在参数列表中的索引位置,索引从0开始,如不指定则按照值的先后顺序自动分配,当模板中出现多个占位符时,需要全部采用手动指定或全部采用自动指定;fill为可选参数,用于指定空白处填充的字符;align为可选参数,用于指定对齐方式,需要配合width一起使用,值为“<”表示内容左对齐,值为“>”表示内容右对齐,值为“=”表示内容右对齐并且把符号放在填充内容的最左侧(只对数字类型有效),值为“^”表示内容居中;sign为可选参数,用于指定有无符号数,值为“+”表示正数加正号、负数加负号,值为“-”表示正数不变、负数加负号,值为空格表示正数加空格、负数加符号;#为可选参数,对于二进制、八进制和十六进制,如果加上“#”表示前面会显示"0b/0o/0x"前缀,否则不显示前缀;width为可选参数,用于指定宽度;precision为可选参数,用于指定保留的小数位数;type为可选参数,用于指定类型,type的取值说明如表1.14所示。
表1.14 type的取值说明

e or E示例如下,输入以下代码并逐行运行:
company = '上市公司:{:s}\t 股票代码:{:d} \t' # 制定模板 company1 = company.format('宁德时代',300750) # 按照模板格式化字符串company1 company2 = company.format('派能科技',688063) # 按照模板格式化字符串company2 print(company1)#查看字符串company1 print(company2)#查看字符串company2
运行结果如图1.56所示。

图1.56 运行结果