Python机器学习原理与算法实现
上QQ阅读APP看书,第一时间看更新

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 运行结果