01 字符串相关方法
字符串.xxx()
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.split
- 字符串1.split(字符串2)——将字符串1中所有的字符串2作为切割点对字符串进行切割,返回包含切割后每一小段对应的字符串的列表
- 字符串1.split(字符串2, N)——将字符串1中前N个字符串2作为切割点为字符串1进行切割
str1 = 'abcmn123mnkplmn##'
result = str1.split('mn')
print(result) # ['abc', '123', 'kpl', '##']
str1 = 'mnabcmnmn123mnkplmn##mn'
result = str1.split('mn')
print(result) # ['', 'abc', '', '123', 'kpl', '##', '']
str1 = 'abcmn123mnkplmn##'
result = str1.split('mn', 2)
print(result)
3.replace
- 字符串1.replace(字符串2, 字符串3)——将字符串1中所有的字符串2都替换成字符串3
- 字符串1.replace(字符串2, 字符串3, N)——将字符串1中前N个字符串2替换成字符串3
str1 = 'mnabcmnmn123mnkplmn##mn'
result = str1.replace('mn', 'ABC')
print(result)
result = str1.replace('mn', '')
print(result)
result = str1.replace('mn', 'AB', 3)
print(result)
4.strip:删除字符串左右两端的空白字符
- 字符串.rstrip()
- 字符串.lstrip()
str1 = '\n\t 小 明\n\t '
print(str1)
print('------------------------------------华丽的分割线-----------------------------------')
result = str1.strip()
print(result)
print('------------------------------------华丽的分割线-----------------------------------')
str1 = '//小明'
result = str1.strip('/')
print(result)
5.find、index
- 字符串1.find(字符串2)——获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在返回-1
- 字符串1.index(字符串2)——获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在报错!
- 字符串1.find(字符串2, 开始下标, 结束下标) ——获取字符串1中指定范围内字符串2第一次出现的位置
- 字符串1.index(字符串2, 开始下标, 结束下标)
str1 = 'how are you? I am fine, thank you! and you?'
print(str1.find('you'))
print(str1.index('you'))
print(str1.find('abc')) # -1
# print(str1.index('abc')) # 报错!
print(str1.find('you', 10)) # 30
print(str1.find('you', 10, 26)) # -1
# rfind、rindex
str1 = 'how are you? I am fine, thank you! and you?'
print(str1.rfind('you'))
6.其他方法
# 1)
print('abcMN233'.casefold())
# 2)
# 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'
# 3)
str1 = 'mnabcmnmn123mnkplmn##mn'
print(str1.count('a')) # 1
print(str1.count('mn')) # 6
# 4)
str1 = 'mnabcmnmn123mnkplmn##mn'
print(str1.endswith('abc'))
print(str1.endswith('#mn'))
print(str1.startswith('ab'))
print(str1.startswith('mn'))
# 5)
name = '小明'
age = 18
# 'xxx今年xx岁!'
result = str.format('{}今年{}岁!', name, age)
print(result)
result = str.format('{0}今年{1}岁!{0}', name, age)
print(result)
result = '{name}今年{age}岁!'.format_map({'name': '小明', 'age': 18})
print(result) # 小明今年18岁!
# 6)
print('2323'.isdecimal()) # True
print('232a3'.isdecimal()) # False
print('23239一'.isdecimal()) # False
print('------------------------------------华丽的分割线-----------------------------------')
print('23211'.isdigit()) # True
print('232+11'.isdigit()) # False
print('2323一'.isdigit()) # False
print('------------------------------------华丽的分割线-----------------------------------')
print('2323'.isnumeric()) # True
print('232a3'.isnumeric()) # False
print('2323一十百万Ⅱ拾Ⅲ'.isnumeric()) # True
str1 = '722实ss际上Mn飞机22-2233=+集H合289'
for x in str1:
# '0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'
if x.isdigit() or x.isupper() or x.islower():
print(x)
print('hjas'.islower())
print('x'.islower())
print('JKSS'.isupper())
print('M'.isupper())
print('a'.upper())
print('M'.lower())
# 7) maketrans、translate
str1 = '1727283112闪烁2nsnk2'
# '一七二七二八三一一二'
# 创建一个映射表
table = str.maketrans('1234567890', '一二三四五六七八九零') # 1-一;2-二;3-三;...
# 根据映射表的对应的关系替换字符串中的相关字符
result = str1.translate(table)
print(result)
# 星期1 -> 星期一
# 星期7 -> 星期天
str1 = '星期7'
table = str.maketrans('1234567', '一二三四五六天')
print(str1.translate(table))
02 字符串格式化
# name = input('请输入姓名:')
name = '小花'
# age = int(input('请输入年龄:'))
age = 25
# xxx今年xx岁!
1.字符串拼接
message = name + '今年' + str(age) + '岁!'
print(message)
money = 15000
# xxx今年xx岁!月薪:xxxx.xx元
message = name + '今年' + str(age) + '岁!月薪:' + str(money) + '元'
print(message)
2.格式化字符串
-
语法:
包含一个或者多个格式占位符的字符串 % (数据1, 数据2, 数据3,…)
-
说明:
()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略
-
常用的字符串占位符:
- %s - 可以给任何类型的数据占位(字符串占位符)
- %d - 只能给数字数据占位(整数占位符)
- %f - 只能给数字数据占位(浮点数占位符, 默认保留6位小数)
- %.Nf - 只能给数字数据占位(保留N位小数)
# xxx今年xx岁!月薪:xxxx.xx元
message = '%s今年%d岁!月薪:%.2f元' % (name, age, money)
print(message)
result = '%s%s%s-%s' % ('abc', 12, [10, 20], 3.456)
print(result) # 'abc12[10, 20]'
result = '%d-%d' % (12, 2.34)
print(result)
result = '%f-%f' % (2.3, 34)
print(result)
result = '%.2f-%.1f' % (2.3, 34)
print(result)
3.f-string
- 1)f-string的基本用法:如果在字符串的最外面加了f,就可以在字符串中通过{}来给字符串提供内容:{表达式} - 表达式的结果就是对应的字符串内容
name = '小明'
age = 18
money = 15000
str1 = '姓名:{name}, 年龄:{age}'
print(str1) # '姓名:{name}'
str2 = f'姓名:{name}, 年龄:{age}'
print(str2) # '姓名:小明'
str3 = f'a:{age}, b:{100}, c:{100 * 2}, d:{100 > 200}, c:{name * 2}, d:{name[-1]}'
print(str3)
# xxx今年xx岁!月薪:xxxx元
message = f'{name}今年{age}岁!月薪:{money}元'
print(message)
-
2)f-string的参数: {提供数据的表达式:参数}
-
a. 控制小数位数: {提供数据的表达式:.Nf}
money = 672828279 result = f'余额:{money:.2f}元' print(result) num = 102.3447 result = f'个数:{num:.0f}' print(result) money = 16500 result = f'年薪:{money*13:.2f}元' print(result)
-
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)
-
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) nums = [155, 1, 92, 9, 23, 889, 18, 5821, 47, 8993] for x in nums: print(f'编号:{x:>4}')
-