python 字符串
字符串
一、字符串
字符串是Python中常用的数据类型,用引号(可以是单引号、双引号和三引号)括起来的数据类型就是字符串
#字符串三种不同的表示
s='hello' h="world" l='''!!!''' print(type(s)) print(type(h)) print(type(l)) 输出结果: <class 'str'> <class 'str'> <class 'str'>
其中,三引号,可以表示多行字符串
m=''' 情深不寿, 强极则辱; 谦谦君子, 温润如玉。 ''' print(m) 输出结果:
情深不寿, 强极则辱; 谦谦君子, 温润如玉。
问题一:三引号什么时候用作注释,什么时候用作字符串
- 代码后续会用到的,就将三引号用作字符串
- 后续代码不使用,只是想对该模块进行解释说明,就将三引号用作注释
问题二:三引号的其他使用方法
- 引号嵌套,单引号嵌套双引号,双引号嵌套单引号,三引号为任何区别
- 三引号可以用来作为注释
- 三引号可以保存字符串的格式(如:在三引号括起来的字符串内容,书写是什么格式,输出就是什么格式)
- 双引号需要依赖连接符来连接换行(\)
二、字符串的常用操作
1.字符串对成员运算符的使用 (可以使用成员运算符:in not in 来判断该字符串中是否存在查找的元素)
m=''' 情深不寿,强极则辱;谦谦君子,温润如玉。 ''' print('的' in m) print('的' not in m) 输出结果: False True
2.字符串的取值(用到字符串的索引,取出字符串中想要取出来的部分)
- 字符串的取值原理:索引 字符串内的每个字符都有对应的下标,索引是从0开始,位置是从1开始
- 下标==索引值
- 索引的取值方向
- 正序索引:从0开始
- 反序索引:从-1开始(也就是从字符串的末尾开始)
如何使用索引值取出对应的字符
m='''情深不寿,强极则辱;谦谦君子,温润如玉。''' print(m[0]) #情,索引值为0,就是对应位置1的字符 print(m[2]) #不 索引值为2,就是对应位置3的字符 print(m[10]) #谦 索引值为10,就是对应位置11的字符 输出结果: 情 不 谦
- 索引超出范围 报indexerror错误
m='''情深不寿,强极则辱;谦谦君子,温润如玉。''' print(m[30]) 输出结果: IndexError: string index out of range
3.字符串的切片(利用索引对字符串进行切片)
- 切片:可以从字符串中获取子字符串,也就是原来字符串中的一部分
- 切片的定义:使用一对方括号,起始位置start、终点位置end、可选步长step,来定义一个切片
- 切片的格式:[start_index:end_index:step]
- start_index:起始位置,如果不传值,则默认为0
- end_index:终点位置,如果不传值,则默认为0
- step:步长,如果不传值,则默认为1,不能为0,用来设定取值之间的间隔 默认值是1,如果步长为1,可以选择不写
- 切片的特点:取头不取尾
m='''情深不寿,强极则辱;谦谦君子,温润如玉。''' print(m[1:6]) #深不寿,强 ---(取头不取尾,实际就是索引值为1到索引值为5,之间的字符) print(m[:]) #情深不寿,强极则辱;谦谦君子,温润如玉。---(利用索引复制字符串) print(m[:8]) #情深不寿,强极则 ---- (索引值为0到索引值为7,之间的字符) print(m[::2]) #情不,极辱谦君,润玉 ---- (对整个字符串,隔一个字符取一个值) print(m[::-1]) #。玉如润温,子君谦谦;辱则极强,寿不深情 ----(对整个字符串,倒叙取值) print(m[-2:-4:-1]) #玉如 ----(从尾部第二个元素到尾部第三个元素的取值) 输出结果: 深不寿,强 情深不寿,强极则辱;谦谦君子,温润如玉。 情深不寿,强极则 情不,极辱谦君,润玉 。玉如润温,子君谦谦;辱则极强,寿不深情 玉如
4.字符串切片的常规操作
- [ : ] 利用切片复制字符串
- [start: ] 从start开始截去到尾部
- [ :end] 从开头截取到end(取头不取尾,也就是截取到end位置的前一个字符)
- [start:end] 从start位置截取到end(取头不取尾,也就是截取到end位置的前一个字符)
- [ : :-1] 将整个字符串进行倒序
5.字符串切片中需要注意的地方:
- start到end取值时,如果设置步长必须与start到end的方向一致
- 如果是从左向右进行切片,那步长设置为正方向,也就是正数 eg:[1:8:4] 从下标为1的位置,取值到下标为2的位置,步长为4
- 如果是从右向左进行切片,那步长设置为反方向,也就是负数 eg:[-2:-4:-1] 从尾部第二个元素到尾部第三个元素的取值,步长为-1
- 如果步长和取值的方向不一致,不会输出任何结果,但也不会报错 eg:[2:4:-2] 取不到值,结果不会输出,但也不会报错
6.字符串的格式化输出
(1)%s %f %d 为常用的几个格式化符号
- %s 格式化字符串
- %f 格式化浮点数字,可以指定小数点后的精度
- %d 格式化整数
print(''' =====个人信息===== 姓名:%s 年龄:%d 性别:%s 家庭地址:%s 薪水:%f '''%('小张',18,'男','北京市海淀区',8500.55))#传的参数要按照对应的顺序传入,然后格式化输出 输出结果: =====个人信息===== 姓名:小张 年龄:18 性别:男 家庭地址:北京市海淀区 薪水:8500.550000
(2)格式化函数:format()
- 基本语法:通过 {} 和 : 代替之前的%
- format函数可以接受不限个参数,而且位置可以不按顺序
- {}占位符,个数最好跟format后面括号里面的数据个数保持一致,如果不一致,{}要比数据少,如果有重复输出,在{}中写上对应参数的位置数
- format()括号里面的数据是有索引的,也就是从0开始,可以在{}中指定取值的索引
- {}里面要是给定索引值,必须全部都给索引值,不能有的有索引值,有的没有索引值
- 关键字索引:传参比较多的时候使用,比较方便
format函数的使用方法,如下
#使用format格式化函数 #方法一(指定位置) print('{} {}'.format('hello','world')) #不设置指定位置,按默认顺序来 print('{0}{1}'.format('蓝天','白云')) #设置指定位置 print('{0}{1},{1}{0}'.format('蓝天','白云')) #设置指定位置 #方法二(设置参数) print('网站名:{name},地址:{url}'.format(name='百度',url='www.baidu.com')) #通过字典设置参数 dict={"name":"百度","url":"www.baidu.com"} print('网站名:{name},地址:{url}'.format(**dict)) #通过列表设置参数 list=["百度","www.baidu.com"] print('网站名:{0[0]},地址:{0[1]}'.format(list)) #使用列表设置参数,索引值前的0,是必须要写的 输出结果: hello world 蓝天白云 蓝天白云,白云蓝天 网站名:百度,地址:www.baidu.com 网站名:百度,地址:www.baidu.com 网站名:百度,地址:www.baidu.com
三、字符串中常用方法
1.find() 方法
- 定义:检测字符串中是否包含子字符串,如果指定开始(beg)和结束(end)的范围,则检测是否包含在指定范围内,如果指定范围内含有查找的字字符串,则返回子字符串在指定范围内的起始索引值,如果未找到,不存在,返回-1
- 语法:str.find(str, beg=0, end=len(string)) str -- 指定检索的字符串 beg -- 开始索引,默认为0。 end -- 结束索引,默认为字符串的长度。
- 返回值:如果包含子字符串返回开始的索引值,否则返回-1。
#find() 不传入起始点和结束点参数 str='三生三世十里桃花' print(str.find('十里')) #4,对应的是查找的字符起始的索引值 print(str.find('小狗')) #-1,因为该字符串内不含有查找的内容,所以返回-1 print(str.find("三生三世",4)) #从索引值为4的位置查找元素,查找不到,返回-1 print(str.find("十里",0,6)) #从开始位置到索引值为6的位置,查找子字符串,返回为4 输出结果: 4 -1 -1 4
2.index() 方法
- 字符串中是否含有查找的子字符串
- 如果能查到子字符串,返回子字符串在指定范围内的起始索引值
- 如果子字符串不存在,直接报错,返回 ValueError: substring not found
str='三生三世十里桃花' print(str.index("十里")) #4,子字符串起始索引值 print(str.index("小狗")) #ValueError: substring not found,index() 如果查找不到,会报错,返回ValueError 输出结果: 4 ValueError: substring not found
总结:find() 和 index() 的区别:
- 都是查找字符串内是否含有查找的子字符串
- 查找到的子字符串,返回结果都为,子字符串起始的索引值
- 不同点,find() 在查找不到的情况下,返回-1。 index() 在查找不到的情况下,会报错,返回ValueError
3.join() 字符串拼接的高级用法
- 用来连接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法
- 需要被连接的序列元素必须都是字符串!!!!!
list=["三生","三世","十里","桃花"] print("".join(list)) #字符串之间无空格连接 print("*".join(list)) #字符串之间用*连接 print(type("*".join(list))) #join()操作的对象为字符串类型 #可以用来拼接文件地址 mydir='','user','bin','eve' print('D:'+'\\'.join(mydir)) #拼接的文件地址:D:\user\bin\eve 输出结果: 三生三世十里桃花 三生*三世*十里*桃花 <class 'str'> D:\user\bin\eve
4.split() 方法
- 通过指定分隔符对字符串进行切片,将字符串分割成序列,是join()的逆方法
- 语法:str.split(str="", num=string.count(str))
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数。默认为 -1, 即分隔所有。
- split()返回的数据类型为列表,split内的传参就是分隔符
str='三生*三世*十里桃花' print(str.split('*')) print(str.split('三')) print(str.split(' ')) 输出结果: ['三生', '三世', '十里桃花'] ['', '生*', '世*十里桃花'] ['三生*三世*十里桃花']
5.strip()
- 用于移除字符串头尾指定的字符(默认为空格或者是换行符,或者是字符序列)
- 此方法只适用于移除开头或者是结尾的字符,不能移除中间部分的字符
- 语法:str.strip([chars]) chars -- 移除字符串头尾指定的字符序列
- 返回值:返回移除字符串头尾指定的字符生成的新字符串
str='******今天晚上有流星雨*****' str1='00000.txt.exe....' str2='12hello21' print(str.strip('*')) print(str1.strip('0')) print(str2.strip('12')) 输出结果: 今天晚上有流星雨 .txt.exe.... hello
6.lower()
- 将字符串中的大写字母转换为小写字母
#将大写字母转换为小写字母 str='I LOVE chain' print(str.lower()) 输出结果: i love chain
7.upper()
- 将字符串中的小写字母转为大写字母。
#将小写字母转换为大写字母 str='I LOVE chain' print(str.upper()) 输出结果: I LOVE CHAIN
8.swapcase()
- 翻转字符串中的大小写,也就是将字符串中的大写字母改为小写字母,小写字母为大写字母
#翻转字符串中的大小写 str='I LOVE chain' print(str.swapcase()) 输出结果: i love CHAIN
9.replace()
- 定义:将字符串中的old(旧字符串)替换成new(新字符串),如果指定了第三个参数max,则替换不超过max次
- 语法:str.replace(old, new[, max])
- old -- 将被替换的子字符串 new -- 新字符串,用于替换old子字符串。 max -- 可选字符串, 替换不超过 max 次
str1='00000.txt.exe....' print(str1.replace('0','#')) #将字符串中的0全部替换成#号显示 print(str1.replace('0','!',3)) #将字符串中的0全部替换成!号,但是最大替换次数不能超过3次 输出结果: #####.txt.exe.... !!!00.txt.exe....
10. count()
- 用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置
- 语法:str.count(sub, start= 0,end=len(string))
- sub -- 搜索的子字符串
- start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
- end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
- 返回值:返回子字符串在字符串中出现的次数。
str='******今天晚上有流星雨*****' print(str.count('*')) #字符串中*号出现的次数 print(str.count('*',6)) #从索引值为6的位置开始到结束,*号出现的次数 print(str.count('*',6,12)) #从索引值为6到索引值为12的位置,*号出现的次数 输出结果: 11 5 0