3.4.3 字符串相关方法
字符串.xxx()
(1)a.字符串.join(序列) - 将序列中的元素用指定的字符串拼接在一起,形成新的字符串(序列中的元素必须是字符串)
list1=['后裔','王昭君','鲁班七号','孙悟空'] #序列中必须是字符串才能用join拼接
result = '+'.join(list1) #''中是用于拼接的东西
print(result) #后裔+王昭君+鲁班七号+孙悟空
b.如果需要join的序列中的元素不是字符串,就想办法把它的元素变成字符串
num=[10,20,30,40,50]
result = ''.join([str(i) for i in num])
print(result) #1020304050
c.序列中的序列可以直接是字符串,再进行拼接
result = '*'.join('abc')
print(result) #a*b*c
(2)字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回包含切割后每一小段对应的字符串的列表
a.字符串1.split(字符串2)
str1 = '14m567mu8imot'
result = str1.split('m')
print(result) #['14', '567', 'u8i', 'ot']
b.字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为字符串1的切割点
str1 = '14m567mu8imotm78'
result = str1.split('m',2)
print(result) #['14', '567', 'u8imotm78']
(3)a.字符串1.replace(字符串2,字符串3) - 将字符串1中所有字符串2都替换成字符串3
str1 = '14m567mu8imotm78'
result = str1.replace('m','n')
print(result) #14n567nu8inotn78
str1 = '14m567mu8imotm78'
result = str1.replace('m','')
print(result) #14567u8iot78
b.字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = '14m567mu8imotm78'
result = str1.replace('m','',2)
print(result) #14567u8imotm78
(4)字符串.strip() - 删除字符串左右两端的空白字符
字符串.rstrip() - 只删除右边头的空白字符
字符串.lstrip() - 只删除左边头的空白字符
str1 =' 67u 567u '
print(str1.strip())
print(str1.rstrip())
print(str1.lstrip())
(5)count() - 统计字符串中某个字符的个数
str1 = '14m567mu8imotm78'
print(str1.count('m')) #4
6)查操作find、index
字符串1.find(字符串2) - 从左向右获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在则返回-1。
字符串1.rfind(字符串2) - 从右向左查第一个出现的。
字符串1.find(字符串2,开始下标,结束下标) - 在指定范围内字符串2第一次出现的位置。
字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的位置(以0开始的下表值返回),如果字符串2不存在则报错!
字符串1.rindex(字符串2)
字符串1.index(字符串2,开始下标,结束下标)
s4 = '王者荣耀王室战争'
print(s4.index('王')) #0
print(s4.index('王',1)) #4
print(s4.rindex('王')) #4
# print(s4.rindex('一')) #报错
print(s4.find('一')) #-1
(7)格式化输出
num=1
print('python{:0>3}'.format(num)) #python003
name ='小明'
age = 18
print('{}今年{}岁'.format(name,age))
print(f'{name}今年{age}岁')
result = '{name}今年{age}岁'.format_map({'name':'小明','age':18})
print(result) #小明今年18岁
(8)字母转换
print('a'.upper()) #小写转大写
print('A'.lower()) #大写转小写
print('abcMN233'.casefold()) #abcmn233 #将大写字母转为小写字母
print('345'.isdigit()) #是数字
print('rfgthyjk'.islower()) #是小写的字母
print('DFGH'.isupper()) #是大写的字母
(9)maketrans、translate - 自制对应关系表进行替换
str1 = '3456780987'
table = str1.maketrans('1234567890','一二三四五六七八九零') #创建映射表
print(str1.translate(table)) #三四五六七八零九八七 #根据映射表的对应关系替换相关字符
str1 = '星期7'
table =str1.maketrans('1234567','一二三四五六天')
print(str1.translate(table)) #星期天
(10)将指定字符串放在指定位置
# center、rjust、ljust、zfill
# 'abc' -> 'xxabcxx'、'xxxxabc'、'abcxxxx'、'0000abc'
str1 = 'abc'
print(str1.center(7, '+')) # '++abc++'
print(str1.rjust(7, '*')) # '****abc'
print(str1.ljust(7, '&')) # 'abc&&&&'
print(str1.zfill(7)) # '0000abc'
(11)判断在开始位置或者结束位置
str1 = 'mnabcmnmn123mnkplmn##mn'
print(str1.endswith('abc')) #False
print(str1.endswith('#mn')) #True
print(str1.startswith('ab')) #False
print(str1.startswith('mn')) #True
(12)a.字符串是否只包含十进制字符
print('2323'.isdecimal()) # True
print('232a3'.isdecimal()) # False
print('23239一'.isdecimal()) # False
b.检测字符串是否只由数字组成,只对 0 和 正数有效
print('23211'.isdigit()) # True
print('232+11'.isdigit()) # False
print('2323一'.isdigit()) # False
c.检测字符串是否只由数字组成
print('2323'.isnumeric()) # True
print('232a3'.isnumeric()) # False
print('2323一十百万Ⅱ拾Ⅲ'.isnumeric()) # True
3.4.4 字符串格式化
xxx今年xx岁!
name = ‘龙泯均’
age = 23
money = 25000
如何解决字符串内容变化的问题?
(1)字符串拼接
print(name + '今年' + str(age) + '岁!月薪:' + str(money) + '元') #龙泯均今年23岁!月薪:25000元
(2)格式字符串
格式字符串:包含一个或者多个格式占位符%(数据1,数据2,数据3…)
说明:()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略
常用的字符串占位符:
%s - 可以给任何类型的数据占位(字符串占位符)
%d - 只能给数字数据占位(整数占位符)
%f - 只能给数字数据占位(浮点数占位符, 默认保留6位小数)
%.Nf - 只能给数字数据占位(保留N位小数)
print('%s今年%d岁!月薪:%.2f元' %(name,age,money)) #龙泯均今年23岁!月薪:25000.00元
result = '%s%s%s-%s' % ('abc', 12, [10, 20], 3.456)
print(result) # abc12[10, 20]-3.456
result = '%d-%d' % (12, 2.34)
print(result) #12-2 #整数
result = '%f-%f' % (2.3, 34)
print(result) #2.300000-34.000000
result = '%.2f-%.1f' % (2.3, 34)
print(result) #2.30-34.0
(3)f-string - 如果在字符串的外面加上f,就可以在字符串中通过{}加入内容
print(f'{name}今年{age}岁!月薪{money}元') #龙泯均今年23岁!月薪25000元
print('{}今年{}岁!月薪:{}元'.format(name,age,money)) #龙泯均今年23岁!月薪:25000元
f-string的参数:{提供数据的表达式:参数}
f-string的基本用法:如果在字符串的最外面加了f,就可以在字符串中通过{}来给字符串提供内容:{表达式} - 表达式的结果就是对应的字符串内容
a.控制小数位数
{提供数据的表达式:.Nf}
money = 2345678356
print(f'余额:{money:.2f}元') #余额:2345678356.00元
money = 16500
print(f'年薪:{money*15:.2f}元') #年薪:247500.00元
b.大金额逗号分割(,)
{提供数据的表达式:,.Nf}
money = 1650000000000
print(f'年薪:{money:,.2f}元') #年薪:1,650,000,000,000.00元
c.小数显示成百分比
{提供数据的表达式:,.N%}
scale = 0.84
print(f'及格率:{scale:.0%}') #及格率:84%
d.控制填充长度(实现center、rjust、ljust、zfill的功能)
{提供数据的表达式:字符>长度}、{提供数据的表达式:字符<长度}、{提供数据的表达式:字符^长度}
注意:如果没有提供字符,会用空格填充
num = 8
print(f'{num:*>7}') #******8
print(f'{num:*<7}') #8******
print(f'{num:*^7}') #***8***
print(f'{num:>7}') # 8
result = f'编号:{num:>7}'
print(result) #编号: 8