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() 的区别:

  1. 都是查找字符串内是否含有查找的子字符串
  2. 查找到的子字符串,返回结果都为,子字符串起始的索引值
  3. 不同点,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:userineve

输出结果:
三生三世十里桃花
三生*三世*十里*桃花
<class 'str'>
D:userineve

4.split()  方法

  • 通过指定分隔符对字符串进行切片,将字符串分割成序列,是join()的逆方法
  • 语法:str.split(str="", num=string.count(str))   
  • str -- 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。  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