10 - 字符串的进阶操作

Day 10

一、字符串的相关操作

1. 字符串.join(序列) - 将序列中的元素用指定的字符串拼接在一起,形成一个新的字符串(序列中的元素必须是字符串)

list1 = ['后裔', '王昭君', '鲁班7号', '孙悟空']
result = ''.join(list1)
print(result)       # '后裔王昭君鲁班7号孙悟空'

result = '+'.join(list1)
print(result)       # '后裔+王昭君+鲁班7号+孙悟空'

result = ' and '.join(list1)
print(result)       # '后裔 and 王昭君 and 鲁班7号 and 孙悟空'
  • 如果需要join的序列中的元素不是字符串,就想办法把它的元素变成字符串再join
nums = [23, 45, 67, 89, 45]
# '2345678945'
# ['23', '45', '67', '89', '45']
result = ''.join([str(x) for x in nums])
print(result)       # '2345678945'

result = '*'.join('abc')            # 'a'、'b'、'c'
print(result)       # 'a*b*c'

2.字符串1.split

  • 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回包含切割后每一小段对应的字符串的列表
str1 = 'abcmn123mnkplmn##'
result = str1.split('mn')
print(result)       # ['abc', '123', 'kpl', '##']


# 当切点在头,末尾或者两个切点相邻,切点依然生效,将会返回空
str1 = 'mnabcmnmn123mnkplmn##mn'
result = str1.split('mn')
print(result)       # ['', 'abc', '', '123', 'kpl', '##', '']
  • 字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点为字符串1进行切割
str1 = 'abcmn123mnkplmn##'
result = str1.split('mn', 2)
print(result)

3.字符串1.replace

  • 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3
str1 = 'mnabcmnmn123mnkplmn##mn'
result = str1.replace('mn', 'ABC')
print(result)
# ABCabcABCABC123ABCkplABC##ABC


result = str1.replace('mn', '')
print(result)
# abc123kpl##
  • 字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2替换成字符串3

result = str1.replace('mn', 'AB', 3)
print(result)

# ABabcABAB123mnkplmn##mn

4.字符串.strip()

  • 字符串.strip() - 删除字符串左右两端的空白字符,但无法删除字符串中间的空白字符
  • 字符串.rstrip() - 删除字符串右端的空白字符
  • 字符串.lstrip() - 删除字符串左端的空白字符
str1 = '\n\t        小 明\n\t         '
print(str1)

'''

	        小 明
	        
'''
result = str1.strip()
print(result)
# 小 明

str1 = '//小明'
result = str1.strip('/')
print(result)
# 小明

5.find、index

  • 字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在返回-1
  • 字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在报错!
str1 = 'how are you? I am fine, thank you! and you?'
print(str1.find('you')) # 8
print(str1.index('you')) # 8

print(str1.find('abc'))     # -1 (表示不存在)
# print(str1.index('abc'))      # 报错!
  • 字符串1.find(字符串2, 开始下标, 结束下标) - 获取字符串1中指定范围内字符串2第一次出现的位置
  • 字符串1.index(字符串2, 开始下标, 结束下标) - 获取字符串1中指定范围内字符串2第一次出现的位置

常用的操作基本就是这些,还有很多相关操作,感兴趣的小伙伴可以自行百度。

二、字符串格式化

  • 如果解决字符串内容变化的问题?

name = input(‘请输入姓名:’)
name = ‘小花’
age = int(input(‘请输入年龄:’))
age = 25
xxx今年xx岁!

money = 15000

1. 字符串拼接

message = name + '今年' + str(age) + '岁!'
print(message)
# 小花今年25岁

2. 格式字符串

  • 语法
    包含一个或者多个格式占位符的字符串 % (数据1, 数据2, 数据3,…)

说明:()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略

常用的字符串占位符:
%s - 可以给任何类型的数据占位(字符串占位符)

result = '%s%s%s-%s' % ('abc', 12, [10, 20], 3.456)
print(result)                # abc12[10, 20]-3.456

%d - 只能给数字数据占位(整数占位符)

result = '%d-%d' % (12, 2.34)
print(result)                # 12-2

%f - 只能给数字数据占位(浮点数占位符, 默认保留6位小数)

result = '%.2f-%.1f' % (2.3, 34)
print(result)                # 2.300000-34.000000

%.Nf - 只能给数字数据占位(保留N位小数)

result = '%.2f-%.1f' % (2.3, 34)
print(result)                 #  2.30-34.0
  • 综合案例


name = '小花'
age = 25
money = 15000


message = '%s今年%d岁!月薪:%.2f元' % (name, age, money)
print(message)

# 小花今年25岁!月薪:15000.00元

3.f-string

  • f-string的基本用法:如果在字符串的最外面加了f,就可以在字符串中通过{}来给字符串提供内容:{表达式} - 表达式的结果就是对应的字符串内容
name = '小明'
age = 18
money = 15000

str1 = '姓名:{name}, 年龄:{age}'
print(str1)     # '姓名:{name},年龄:{age}'

str2 = f'姓名:{name}, 年龄:{age}'
print(str2)     # 姓名:小明, 年龄:18

str3 = f'a:{age}, b:{100}, c:{100 * 2}, d:{100 > 200}, c:{name * 2}, d:{name[-1]}'
print(str3)
# a:18, b:100, c:200, d:False, c:小明小明, d:明

# xxx今年xx岁!月薪:xxxx元
message = f'{name}今年{age}岁!月薪:{money}元'
print(message)            # 小明今年18岁!月薪:15000元

f-string的参数: {提供数据的表达式:参数}
  • a. 控制小数位数: {提供数据的表达式:.Nf}
money = 672828279
result = f'余额:{money:.2f}元'
print(result)                     # 余额:672828279.00元

num = 102.3447
result = f'个数:{num:.0f}'
print(result)                     # 个数:102

money = 16500
result = f'年薪:{money*13:.2f}元'
print(result)                     # 个数:年薪:214500.00元
  • b. 大金额逗号分隔: {提供数据的表达式:,}
money = 165009000
result = f'金额:{money:,}元'
print(result)       # 金额:165,009,000元

# {提供数据的表达式:,.Nf}   -       既控制小数位数,又使用逗号
result = f'金额:{money:,.2f}元'
print(result)       # '金额:165,009,000.00元'
  • c.小数显示成百分比: {提供数据的表达式:.N%}
scale = 0.84
result = f'及格率:{scale:.1%}'
print(result)       # 及格率:84.0%
  • d.控制填充长度(实现center、rjust、ljust、zfill的功能)
    • {提供数据的表达式:字符>长度}、{提供数据的表达式:字符<长度}、{提供数据的表达式:字符^长度}
    • 注意:如果没有提供字符,会用空格填充
num = 6
result = f'{num:0>3}'
print(result)     # '006'

result =f'{num:x>7}'
print(result)       # 'xxxxxx6'

result =f'{num:x<7}'
print(result)      # '6xxxxxx'

result =f'{num:x^7}'        # 'xxx6xxx'
print(result)


result = f'编号:{num:>7}'
print(result)                 # 编号:      6

nums = [155, 1, 92, 9, 23, 889, 18, 5821, 47, 8993]
for x in nums:
    print(f'编号:{x:>4}')  
'''
编号: 155
编号:   1
编号:  92
编号:   9
编号:  23
编号: 889
编号:  18
编号:5821
编号:  47
编号:8993


'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值