day10 进阶字符串

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值