字符串进阶
字符串.xxx()
-
字符串.join(序列) 将序列中的元素用指定的字符串拼接在一起,形成一个新的字符串(序列中的元素必须是字符串)。
list1 = ['ts','tian','jackeylove','crisp'] result = '+'.join(list1) print(result)) # ts+tian+jackeylove+crisp # 如果需要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'
-
字符串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 = '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', 'ABC') print(result) # ABCabcABCABC123ABCkplABC##ABC result = str1.replace('mn', 'AB', 3) print(result) # ABabcABAB123mnkplmn##mn
-
字符串.strip() 删除字符串左右两端的空白字符。
字符串.rstrip() 删除字符串右两端的空白字符。
字符串.lstrip() 删除字符串左两端的空白字符。
str1 = '\n\t 小 明\n\t ' print(str1) # 小 明 result = str1.strip() print(result) #小 明 str1 = '//小明' result = str1.strip('/') print(result) #小明
-
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, 开始下标, 结束下标)字符串1.rfind 从右向左查第一个出现的。
字符串1.rindex 从右向左查第一个出现的。
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)) # 30 print(str1.find('you', 10, 26)) # -1 print(str1.find('you', 10)) # 30
-
字母大小写转换。
print('abcMN233'.casefold()) # abcmn233 字符串内大写字母大写转小写 print('b'.upper()) # B 小写转大写 print('B'.lower()) # b 大写转小写
-
给定字符串放于指定位置。
# 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'
-
计算字符串中某元素的个数。
str1 = 'mnabcmnmn123mnkplmn##mn' print(str1.count('a')) # 1 print(str1.count('mn')) # 6
-
字符串1.endswith(字符串2) 字符串1开头是否为字符串2
字符串1.startswith(字符串2) 字符串1结尾是否为字符串2
判断开头或者结尾是否为给定字符。
str1 = 'mnabcmnmn123mnkplmn##mn' print(str1.endswith('abc')) # False print(str1.endswith('#mn')) # True print(str1.startswith('ab')) # False print(str1.startswith('mn')) # True
-
字符串1.isdecimal() 字符串1是否只包含十进制字符。
字符串1.isdigit() 字符串1是否只包含数字,该函数仅对0和正整数有用。
字符串1.isnumeric() 字符串1是否只有数字组成。
print('2323'.isdecimal()) # True print('232a3'.isdecimal()) # False print('23239一'.isdecimal()) # False print('23211'.isdigit()) # True print('232+11'.isdigit()) # False print('2323一'.isdigit()) # False print('2323'.isnumeric()) # True print('232a3'.isnumeric()) # False print('2323一十百万Ⅱ拾Ⅲ'.isnumeric()) # True
字符串格式化
-
字符串拼接
money = 15000 message = name + '今年' + str(age) + '岁!月薪:' + str(money) + '元' print(message) # 小花今年25岁!月薪:15000元
-
格式字符串
常用的字符串占位符: %s - 可以给任何类型的数据占位(字符串占位符) %d - 只能给数字数据占位(整数占位符) %f - 只能给数字数据占位(浮点数占位符, 默认保留6位小数) %.Nf - 只能给数字数据占位(保留N位小数) name = '小花' age = 25 money = 15000 message = '%s今年%d岁!月薪:%.2f元' % (name, age, money) print(message) # 小花今年25岁!月薪:15000.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
-
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) # a:18, b:100, c:200, d:False, c:小明小明, d:明 message = f'{name}今年{age}岁!月薪:{money}元' print(message) # 小明今年18岁!月薪:15000元
-
f-string的参数: {提供数据的表达式:参数}。
控制小数位数: {提供数据的表达式:.Nf}。
大金额逗号分隔: {提供数据的表达式: ,}。
小数显示成百分比: {提供数据的表达式:.N%}
money = 672828279 result = f'余额:{money:.2f}元' print(result) # 余额:672828279.00元 money = 165009000 result = f'金额:{money:,}元' print(result) # 金额:165,009,000元 scale = 0.84 result = f'及格率:{scale:.1%}' print(result) # 及格率:84.0%
控制填充长度(实现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}' # 'xxx6xxx' print(result)