字符串和函数
字符串相关方法
字符串.xxx()
-
字符串.join(序列) - 将序列中的元素用指定的字符串拼接在一起,形成一个新的字符串(序列中的元素必须是字符串)
list1 = ['后裔', '王昭君', '鲁班七号', '孙悟空'] result = ''.join(list1) # 后裔王昭君鲁班七号孙悟空 print(result) result = '+'.join(list1) # 后裔+王昭君+鲁班七号+孙悟空 print(result) result = ' and '.join(list1) # 后裔 and 王昭君 and 鲁班七号 and 孙悟空 print(result)
如果需要join的序列中的元素不是字符串,就想办法把它的元素变成字符串再join
nums = [23, 45, 67, 89, 45] result = ''.join([str(i) for i in nums]) print(result) # 2345678945 result = '*'.join('abc') print(result) # a*b*c
-
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割,返回包含切割后每一小段对应的字符串的列表
字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割
str1 = 'abcmn123mnkplmn##' result = str1.split('mn') print(result) # ['abc', '123', 'kpl', '##'] str1 = r'c:\root\bin\etc\path' result = str1.split('\\') print(result) # ['c:', 'root', 'bin', 'etc', 'path'] str1 = 'mnabcmnmn123mnkplmn##mn' result = str1.split('mn') print(result) # ['', 'abc', '', '123', 'kpl', '##', ''] str1 = 'abcmn123mnkplmn##' result = str1.split('mn', 2) print(result) # ['abc', '123', 'kplmn##']
-
字符串1.replace(字符串2,字符串3) - 将字符串1中所有字符串2都替换成字符串3
字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'mnabcmnmn123mnkplmn##mn' result = str1.replace('mn', 'ab') print(result) # ababcabab123abkplab##ab str1 = 'mnabcmnmn123mnkplmn##mn' result = str1.replace('mn', '') print(result) # abc123kpl## str1 = 'mnabcmnmn123mnkplmn##mn' result = str1.replace('mn', 'AB', 2) print(result) # ABabcABmn123mnkplmn##mn
-
字符串.strip() - 删除字符串左右两端的空白字符
字符串.rstrip()
字符串.lstrip()str1 = '\n \t小 明 \n \t' print(str1) str2 = str1.strip() print(str2) str1 = '/小明///' str2 = str1.strip('/') print(str2)
-
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')) # 8 print(str1.index('you')) # 8 print(str1.find('abc')) # -1(未找到) # print(str1.index('abc')) # 报错!!! print(str1.find('you', 10)) # 29 print(str1.find('you', 10, 26)) # -1 # rfind、rindex str1 = 'how are you? I am fine,thank you! and you?' print(str1.rfind('you')) # 38 print(str1.rindex('you')) # 38
-
其他方法
# 1).casefold()无关大小写 str1 = 'asdASDUH5456' str2 = str1.casefold() print(str2) # 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)count() - 统计字符或者子串个数 str1 = 'mnabcmnmn123mnkplmn' print(str1.count('a')) # 1 print(str1.count('mn')) # 5 # 4)endswith() - 是否以什么结尾 # startswith() - 是否以什么开头 str1 = 'mnabcmnmn123mnkplmn' print(str1.endswith('mn')) # True print(str1.startswith('mn')) # True # 5)format(字符串),字符串拼接 name = '小明' age = 18 # 'xxx今年xx岁' result = str.format('{}今年{}岁!', name, age) print(result) # 小明今年18岁! result = str.format('{0}今年{1}岁!{0}{1}', name, age) print(result) # 小明今年18岁!小明18 # 6)format_map(字典) result = '{name}今年{age}岁'.format_map({'name': '小明', 'age': 18}) print(result) # 小明今年18岁 # 6)isdecimal()、isdigit()、isdecimal() print('2211'.isdecimal()) # True print('21ad'.isdecimal()) # False print('2211一'.isdecimal()) # False print('2341'.isdigit()) # True print('2342asd'.isdigit()) # False print('2211一'.isdecimal()) # False print('2341'.isnumeric()) # True print('2342asd'.isnumeric()) # False print('2211一⑤Ⅲ'.isnumeric()) # True str1 = '722dhaodiha++*-*4564' str2 = '' for i in str1: if i.isdigit(): str2 += i print(str2) # 7224564 # .islower(),.isupper() - 字符串是否全为大写或者小写 print('x'.islower()) # True print('xadsad'.islower()) # True print('X'.isupper()) # True print('GASDUH'.isupper()) # True # .upper(),.lower() - 大小写转换 # 7) maketrask、translate str1 = '245adsadgh6532jeuif' # '245adsadgh6532jeuif'->'二四五adsadgh六五三二jeuif' # 创建一个映射表 table = str.maketrans('1234567890', '一二三四五六七八九零') # 根据映射表的对应关系替换字符串中的相关字符 result = str1.translate(table) print(result) # 二四五adsadgh六五三二jeuif # 星期一 # 星期7 -> 星期天 str1 = '星期1,星期2,星期3,星期4,星期5,星期6,星期7' table = str.maketrans('1234567', '一二三四五六天') result = str1.translate(table) print(result) # 星期一,星期二,星期三,星期四,星期五,星期六,星期天
字符串格式化
如何解决字符串内容变化的问题
-
字符串拼接
message = name + '今年' + str(age) + '岁!' print(message) money = 15000 # xxx今年xx岁!月薪:xxxx元 message = name + '今年' + str(age) + '岁!月薪:' + str(money) + '元' print(message)
-
格式字符串
语法:
格式字符串:包含一个或者多个格式占位符的字符串 % (数据1, 数据2, 数据3, …)
说明:()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略
常用的字符串占位符
%s - 可以给任何类型的数据占位(字符串占位符)
%d - 只能给数字数据占位(整数占位符)
%f - 只能给数字数据占位(浮点数占位符,默认保留6位小数)
%.Nf - 只能给数字数据占位(浮点数占位符,保留N位小数)# xxx今年xx岁!月薪:xxxx元 message = '%s今年%d岁!月薪:%.2f元' % (name, age, money) print(message) result = '%s%s%s' % ('abc', 12, [10, 20]) print(result) # abc12[10, 20] result = '%d-%d' % (19, 2.34) print(result) # 19-2 result = '%f-%f' % (19, 2.34) print(result) # 19.000000-2.340000 result = '%.2f-%.1f' % (19, 2.34) print(result) # 19.00-2.3
-
f-string
1)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元
2)f-string的参数:{提供数据的表达式:参数}
a.控制小数位数
{提供数据的表达式:.Nf}
mcssage = f'{name}今年{age}岁!月薪:{money:.2f}元' print(message) # 小明今年18岁!月薪:15000.00元 num = 2.32 print(f'{num:.0f}') # 2
b.大金额逗号分割:{提供数据的表达式:,}
# 1,000,000,000 money = 16500000 result = f'金额:{money:,}元' print(result) # 金额:16,500,000元 # {提供数据的表达式:,.Nf} - 即控制小数位数,又使用逗号 result = f'金额:{money:,.2f}元' print(result) # 金额:16,500,000.00元
c.小数显示成百分比:{提供数据的表达式:.N%}
scale = 0.84 result = f'及格率:{scale:.0%}' print(result) # 及格率:84%
d.控制填充长度(实现center、rjust、ljust、zfill的功能)
{提供数据的表达式:字符^长度}、{提供数据的表达式:字符<长度}、{提供数据的表达式:字符>长度}
注意:如果没有提供字符,会用空格填充
# 'abc' -> 'xxabcxx' num = 3 class_name = 'py2004' stu_id = f'{class_name}{num:0>3}' print(stu_id) # py2004003 stu_id = f'{class_name}{num:0>5}' print(stu_id) # py200400003 stu_id = f'{class_name}{num:0<5}' print(stu_id) # py200430000 stu_id = f'{class_name}{num:0^5}' print(stu_id) # py200400300 stu_id = f'{class_name}{num:>5}' print(stu_id) # py2004 3 nums = [154, 2, 5, 45, 624654, 5412, 5412] for i in nums: print(f'编号:{i:>6}') """ 编号: 154 编号: 2 编号: 5 编号: 45 编号:624654 编号: 5412 编号: 5412 """