字符串进阶总结
字符串相关函数
-
len() 计算长度
-
str()类型转换
所有的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号
num = 123 # str(num) - '123' num2 = 1.23 # str(num2) - '1.23' list1 = [10,20,30] print(list1) # [10, 20, 30] # str(list1) - '[10, 20, 30]' list2 = ["abc",10,20] print(list2) # ['abc', 10, 20] # str(list2) # "['abc', 10, 20]" list2 = ["abc",10,20,'ab'] print(list2) # ['abc', 10, 20, 'ab'] # str(list2) - "['abc', 10, 20, 'ab']" dict1 = {'a':10,"b":20} print(dict1) # {'a': 10, 'b': 20} # str(dict1) - "{'a': 10, 'b': 20}" str1 = str(dict1) for x in str1: print(x) nums = [10, 20, 30] new_str1 = str(nums) print(new_str1) # '[10, 20, 30]' nums.append(100) print(nums)
-
eval(字符串)
作用:获取指定字符串引号中的内容(去取字符串的引号)
注意:这儿的字符串去掉引号以后必须是一个合法的表达式
# 1)去掉引号以后是合法的数据 - str的反向操作 result = eval('100') # 100 print(result, result * 2, result + 10) # result = eval('abc') # 报错 result = eval('"abc"') # "abc" print(result, len(result)) result = eval('[10, 20, 30]') # [10, 20, 30] result.append(100) print(result) # [10, 20, 30, 100] # 2) 去掉引号以后是合法的表达式 result = eval('100 + 200') # 100 + 200 print(result) abc = 10 result = eval('abc + 100') # abc + 100 print(result) nums = [10, 20, 30] result = eval('nums') # nums print(result) nums = [10, 20, 30] eval('nums.append(100)') # nums.append(100) print(nums) def func2(): print('你好吗?') def func3(): print('我不好!') # funcname = input('请输入需要调用的函数名:') # eval(funcname+'()')
字符串方法
-
join
作用:将序列中的元素用指定的字符串连接成一个新的字符串(序列中的元素必须全部都是字符串)
# 'helloworld!你好世界' result = ''.join(list1) print(result) # 'helloworld!你好世界' result = ','.join(list1) print(result) # 'hello,world!,你好,世界' result = '123'.join(list1) print(result) # 'hello123world!123你好123世界' str1 = 'hello' # 'h e l l o' result = ' '.join(str1) print(result) # 'h e l l o' # 练习:将nums中的元素拼接成一个数字, 102030452 nums = [10, 20, 30, 4, 52] result = ''.join([str(x) for x in nums]) print(int(result)) # 102030452 # 练习:将nums中所有的个位数拼接成一个数字字符串, '09042' nums = [10, 29, 30, 4, 52] result = ''.join([str(x % 10) for x in nums]) print(result) # '09042' # 练习:将list1中所有的数字用'+'连接,并且计算他们的和: '19+1.23+8+22.2=50.43' list1 = [19, 'abc', True, 1.23, 8, 22.2, '环境'] result = '+'.join([str(x) for x in list1 if type(x) in (int, float)]) print(result, eval(result), sep='=')
-
split 切割
# 1) 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割,返回一个包含多个字符串的列表 # 2) 字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割,返回一个包含多个字符串的列表 str1 = 'abc123hello123你好123Python' result = str1.split('123') print(result) # ['abc', 'hello', '你好', 'Python'] # 注意:如果切割点在字符串开头、或者字符串结尾、或者连续出现多个切割点都会产生空串 str1 = '123abc123hello123123你好123Python123' print(str1.split('123')) # ['', 'abc', 'hello', '', '你好', 'Python', ''] str1 = 'abc123hello123你好123Python' print(str1.split('123', 2)) # ['abc', 'hello', '你好123Python']
-
replace 替换
# 1)字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3 # 2)字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3 str1 = 'how are you? Im fine, Thank you! you see see, one day day!' # you -> me result = str1.replace('you', 'me') print(result) # 'how are me? Im fine, Thank me! me see see, one day day!' result = str1.replace('you', 'me', 1) print(result) # 'how are me? Im fine, Thank you! you see see, one day day!'
-
strip
# 字符串.strip() - 去掉字符串前后的空白字符 # 字符串.strip(字符) print('------------------------------------华丽的分割线-----------------------------------') str1 = ' \t \n good good study \n ' result = str1.strip() print(result) str2 = '///good good study/' result = str2.strip('/') print(result)
-
count
# 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数 str1 = 'how are you? Im fine, Thank you! you see see, one day day!' print(str1.count('you')) print(str1.count('a'))
-
maketrans、translate
# str.maketrans(字符串1, 字符串2) - 通过字符串1和字符串2创建替换对应关系表 # 字符串.translate(对应关系表) - 按照对应关系表将字符串中字符进行替换 table = str.maketrans('abc', '123') # a-1,b-2,c-3 str1 = 'aamnbcabcmn' result = str1.translate(table) print(result) # 11mn23123m
-
center、ljust、rjust、zfill
""" 字符串.center(长度, 字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放中间 字符串.ljust(长度, 字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放左边 字符串.rjust(长度, 字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放右边 字符串.zfill(长度) == 字符串.rjust(长度, '0') """
str1 = 'abc' print(str1.center(7, 'x')) # 'xxabcxx' print(str1.ljust(7, 'x')) # 'abcxxxx' print(str1.rjust(7, 'x')) # 'xxxxabc' print(str1.center(2, 'x')) # 'abc' num = '123' print(num.zfill(6)) # '00123'
-
find、index
字符串1.find(字符串2) - 获取字符串2在字符串1中第一次出现的位置, 如果字符串2不存在返回-1 字符串1.index(字符串2) - 获取字符串2在字符串1中第一次出现的位置, 如果字符串2不存在报错! 字符串1.rfind(字符串2) - 从后往前 字符串1.rindex(字符串2)
str1 = 'how are you? Im fine, Thank you! you see see, one day day!' print(str1.find('you')) # 8 print(str1.index('you')) # 8 print(str1.find('youu')) # -1 # print(str1.index('youu')) # 报错! print(str1.rfind('you')) # 33
-
isdigit、isnumeric - 判断是否是纯数字字符串
# 字符串.isdigit() - 判断字符串中的元素是否全是数字字符(0~9) # 字符串.isnumeric() - 判断字符串中的元素是否全是具有数字意义的字符 str1 = '2342' print(str1.isdigit()) # True print(str1.isnumeric()) # True str1 = '2342一十百千八九ⅤⅣ捌壹' print(str1.isdigit()) # False print(str1.isnumeric()) # True print('k'.islower()) print('M'.isupper()) print('KMsh-23KOP'.lower()) print('kamsHu823lp'.upper())
格式化字符串
# 问题:写代码的时候可能会出现一个字符串中的部分内容无法确定
# xxx今年xx岁!
# 方法1:字符串拼接
str1 = name + '今年' + str(age) + '岁!'
print(str1)
# 方法2:使用格式占位符
str1 = '%s今年%d岁!' % (name, age)
print(str1)
# 方法3:使用f-string
str1 = f'{name}今年{age}岁!'
print(str1)
# 1. 格式占位符创建字符串
"""
语法:包含格式占位符的字符串 % (数据1, 数据2, 数据3,...)
注意:后面括号中的数据必须和前面字符串中的占位符一一对应
常用的格式占位符:
%s - 字符串占位符,可以对应任何类型的数据
%d - 整数占位符,可以对应任何数字
%f - 浮点数占位符,可以对应任何数字
%.Nf - 保留N位小数
"""
# xxx今年xx岁,月薪:xxxx元!
str1 = '%s今年%d岁,月薪:%.2f元!' % (name, age, 10890)
print(str1) # '小明今年18岁,月薪:10890.00元!'
price = 34.889
str2 = '价格:%s' % price
print(str2) # 价格:34.889
str2 = '价格:%d' % price
print(str2) # 价格:34
str2 = '价格:%f' % price
print(str2) # 价格:34.889000
# 2. f-string
"""
语法:在字符串最前面加f,就可以在字符串中通过'{表达式}'来提供字符串中变化的部分
"""
# 1)基本用法
name = '小明'
age = 18
str1 = '{name}'
print(str1) # '{name}'
str1 = f'{name}'
print(str1) # '小明'
str1 = f'{name * 2}'
print(str1) # '小明小明'
str1 = f'{name[1]*3}'
print(str1) # '明明明'
str1 = f'{name}=abc={age + 10}'
print(str1) # '小明=abc=28'
score = [90, 89, 67]
str1 = f'{name}三门学科的分数:{str(score)[1:-1]}'
print(str1) # '小明三门学科的分数:90, 89, 67'
# 1)加参数: {表达式:参数} (口诀:“填 对 数 字”)
# a. 控制小数位数的参数: {表达式:.Nf}
money = 17283
str1 = f'年薪:{money * 13:.2f}元'
print(str1) # 年薪:224679.00元
# b. 显示百分比: {表达式:.N%}
rate = 0.87
str1 = f'班级及格率:{rate:.2%}'
print(str1) # 班级及格率:87.00%
# c. 逗号显示金额:{表达式:,}
# 1,000
# 18,293,020,200
money = 172830
str1 = f'年薪:{money * 13:,}元'
print(str1) # 年薪:2,246,790元
money = 172830
str1 = f'年薪:{money * 13:,.2f}元'
print(str1) # 年薪:2,246,790.00元
# d.修改填充内容的长度: {表达式:字符>长度}、{表达式:字符<长度}、{表达式:字符^长度}
num = 23
str1 = f'py2202{num:0>5}'
print(str1)
str1 = f'py2202{num:0<5}'
print(str1)
str1 = f'py2202{num:0^5}'
print(str1)
str1 = f'py2202{num:❀>5}'
print(str1)