字符串的方法与拼接
1 字符串相关方法
基本套路:字符串.xxx()
-
字符串.join(序列)
将序列中的元素用指定的字符串拼接在一起,形成一个新的字符串(序列中的元素必须是字符串)。
如果需要join的序列中的元素不是字符串,就想办法把它的元素变成字符串再join。
list1 = ['a', 'b', 'c'] result = ''.join(list1) print(result) #abc result = '+'.join(list1) print(result) #a+b+c result = 'and'.join(list1) print(result) #a and b and c nums = [1, 2, 3, 4, 5] result = ''.join([str(i) for i in nums]) print(result) #12345 result = '*'.join('abc') print(result) #a*b*c
2.split
1)字符串1.split(字符串2)
将字符串1中所有的字符串2作为切割点对字符串进行切割,返回包含切割后每一段对应的字符串的列表。
str1 = 'absfiuefhahkajsku768iu78765hkush7687tiujn7t' result = str1.split('iu') print(result) #['absf', 'efhahkajsku768', '78765hkush7687t', 'jn7t']
切了之后,字符串2就没了。
str1 = 'iuabsfiueiuiufhahkajsku768iu78ush7687tiujn7tiu' result = str1.split('iu') print(result) #['', 'absf', 'e', '', 'fhahkajsku768', '78ush7687t', 'jn7t', '']
切割点在开头、结尾、或中间连续出现会切出空字符串。
2)字符串1.split(字符串2,N)
将字符串1中前N个字符串2作为切割点。
str1 = 'iuabsfiueiuiufhahkajsku76887tiujn7tiu' result = str1.split('iu', 2) print(result) #['', 'absf', 'eiuiufhahkajsku76887tiujn7tiu']
3.replace
1)字符串1.replace(字符串2,字符串3)
将字符串1中所有的字符串2都替换成字符串3。
str1 = 'iuabsfiueiuiuf87tiujn7tiu' result = str1.replace('iu', 'ABC') print(result) #ABCabsfABCeABCABCf87tABCjn7tABC #替换空字符串,删掉 str1 = 'iuabsfiueiuiuf87tiujn7tiu' result = str1.replace('iu', '') print(result) #absfef87tjn7t
2)字符串1.replace(字符串2,字符串3,N)
将字符串1中前N个字符串2替换成字符串3
str1 = 'iuabsfiueiuiuf87tiujn7tiu' result = str1.replace('iu', 'ABC',3) print(result) #ABCabsfABCeABCiuf87tiujn7tiu
4.strip
1)字符串.strip()
删除字符串左右两端的空白字符。
不能删除字符串中间的空白字符。
str1 = ' \n\t 小 妹\n\t ' result = str1.strip() print(result) #小 妹
2)字符串.rstrip()
删除字符串右端的空白字符。
3)字符串.lstrip()
删除字符串左端的空白字符。
str1 = '小 妹//' result = str1.strip('/') print(result) #小 妹
5.find、index查找
1)字符串1.find(字符串2)
获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在返回-1
2)字符串1.index(字符串2)
获取字符串1中字符串2第一次出现的位置(以0开始的下标值返回),如果字符串2不存在报错!
3)字符串1.find(字符串2,开始下标,结束下标)
获取字符串1中指定范围内字符串2第一次出现的位置。
4)字符串1.index(字符串2,开始下标,结束下标)
获取字符串1中指定范围内字符串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')) #报错:ValueError: substring not found print(str1.find('you', 10)) # 30 print(str1.index('you', 10)) # 30 print(str1.find('you', 10, 26)) # -1 print(str1.index('you', 10, 26)) #报错:ValueError: substring not found
5)rfind、reindex
倒着数,第一个you,同上。
str1 = 'how are you? I am fine, thank you! and you?' print(str1.rfind('you')) #39
6.其他方法
1)字符串.casefold()
把字符串变成一个无关字母大小写比较的字符串版本。比较的时候,字母大小写一样。
print('abcMN123'.casefold()) #abcmn123
2)center、rjust、ljust、zfill(0填充)
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 = 'iuabsfiueiuiuf87tiujn7tiu' result = str1.count('iu') print(result) #6
str1='dsfi98京津冀我jnier7ucpjmcf' for x in str1: if x.isdigit() or x.isupper() or x.islower(): print(x)
4)字符串1.endswith(字符串2)
判断字符串1是否以字符串2结尾。
str1 = 'iuabsfiueiuiuf87tiujn7tiu' print(str1.endswith('iu')) #True print(str1.endswith('abc')) #False
5)字符串1.startswith(字符串2)
判断字符串1是否以字符串2开头。
str1 = 'iuabsfiueiuiuf87tiujn7tiu' print(str1.startswith('iu')) #True print(str1.startswith('abc')) #False
6)format
还可以添加下标确定此处所需的是哪一个元素。
name = '小妹' age = 18 result = str.format('{}今年{}岁', name, age) print(result) #小妹今年18岁 result = str.format('{0}今年{1}岁,{1}岁的{0}', name, age) print(result) #小妹今年18岁,18岁的小妹 result = f'{name}今年{age}岁' print(result) #小妹今年18岁
7)isdecimal、isdigit、isnumeric
判断字符串是否全是数字。
str1 = 'dsfi98京津冀我jnier7ucpjmcf' for x in str1: if x.isdigit() or x.isupper() or x.islower(): print(x, end='') #dsfi98jnier7ucpjmcf
8)isupper是否全是大写字母
upper小写字母转成大写字母
islower是否全是小写字母
lower大写字母转成小写字母
print('hdh'.islower()) #True print('JSS'.isupper()) #True print('a'.upper()) #A print('F'.lower()) #f
9)maketrans、translate
一般成对出现。
只能以字符为单位替换,不能字符与字符串替换。
str1 = '13442314' #创建一个映射表 table = str.maketrans('1234567890', '一二三四五六七八九零') #根据映射表的对应的关系替换字符串中的相关字符 result = str1.translate(table) print(result) #一三四四二三一四
2 如何解决字符串内容变化的问题?
1.字符串拼接
name=input('请输入姓名:')
age=int(input('请输入年龄:'))
message=name+'今年'+str(age)+'岁!'
print(message)
2.格式字符串
语法🌸:
包含一个或者多个格式占位符的字符串%(数据1,数据2,数据3,...)
说明:()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略。
常用的字符串占位符:
%s 可以给任何类型的数据占位(字符串占位符)
%d 只能给数字数据占位(整数占位符)
%f 只能给数字数据占位(浮点数占位符,默认保留6位小数)
%.Nf 只能给数字数据占位(保留N位小数)
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
message = name + '今年' + str(age) + '岁!'
print(message)
money = 15000
message = '%s今年%d岁!月薪%f元。' % (name, age, money)
print(message)
结果:
请输入姓名:小米
请输入年龄:16
小米今年16岁!
小米今年16岁!月薪15000.000000元。
result = '%s%s%s' % ('abc', 12, [10, 20])
print(result) #abc12[10, 20]
result = '%d-%d' % (12, 2.34)
print(result) #12-2
result = '%f-%.2f' % (9.29, 8)
print(result) #9.290000-8.00
3.f-string
1)f-string的基本用法:如果在字符串的最外面加了f,就可以在字符串中通过{}来给字符串提供内容:{表达式}——表达式的结果就是对应的字符串的内容
name = '小妹'
age = 20
str1 = '姓名:{name},年龄:{age}'
str2 = f'姓名:{name},年龄:{age}'
print(str1) #姓名:{name},年龄:{age}
print(str2) #姓名:小妹,年龄:20
str3 = f'a:{age},b:{100},c:{100 * 2},d:{100 > 200},e:{name * 2},f:{name[-1]}'
print(str3) #a:20,b:100,c:200,d:False,e:小妹小妹,f:妹
2)f-string的参数:{提供数据的表达式:参数}
a.控制小数位数
{提供数据的表达式:.Nf}
money = 65758938374364780
result = f'余额:{money:.2f}元'
print(result) #余额:65758938374364784.00元
num = 9.29
result = f'个数:{num:.0f}'
print(result) #个数:9
money = 16500
result = f'年薪:{money * 24:.2f}元'
print(result) #年薪:396000.00元
b.大金额逗号分隔
{提供数据的表达式:,}
{提供数据的表达式:,.Nf} 既控制小数位数,又使用逗号
money = 1454534646500
result = f'年薪:{money:,.2f}元'
print(result) #年薪:1,454,534,646,500.00元
c.小数显示成百分比
{提供数据的表达式:.N%}
scale = 0.12
result = f'及格率:{scale:.2%}'
print(result) #及格率:12.00%
d.控制填充长度(实现center、rjust、ljust、zfill的功能)
{提供数据表达式:字符>长度}、{提供数据表达式:字符<长度}、{提供数据表达式:字符^长度}
如果没有提供字符,会用空格填充。
num = 3
class_name = 'py123'
study_id = f'{class_name}{num:0>3}'
print(study_id) #py123003
result = f'{num:x>8}'
print(result) #xxxxxxx3
result = f'{num:x<8}'
print(result) #3xxxxxxx
result = f'{num:x^8}'
print(result) #xxx3xxxx
result = f'{num:>8}'
print(result) # 3
nums = [234, 2, 33, 46, 4454]
for i in nums:
print(f'编号:{i:>7}')
结果:
编号: 234
编号: 2
编号: 33
编号: 46
编号: 4454