python字符串应用
一、字符串认识
1.什么是字符串(str)
容器型数据类型; 将’‘、“”、’‘’‘’'、“”“”""作为容器的标志里面的每个符号就是字符串中元素。
不可变的(不支持增删改);有序的(支持下标操作)
元素(字符):可以是任何文字符号, 包括:数字、字母、汉字、日文、韩语、表情符号、标点等
任何文字符号都可以是字符串的元素
str1 = '10,20,30'
str2 = '12,=)*mksJkH胡上课😁❀'
三个引号开头三个引号结束的字符串,在字符串中可以直接按回车换行
str3 = "abc\n123"
print(str3)
str4 = '''abc
123'''
print(str4, type(str4))
2. 转义字符
字符 - 字符串中的元素(字符串每一个独立的符号)
字符串中的字符可以分为两种:普通字符、转义字符
1)普通字符: 在字符串中表示符号本身的字符
2)转义字符: \和指定的一些符号组合在一起表示特殊功能或者特殊意义的字符。
转义字符是C语言创建的,但是很多都已经没有存在的价值的,目前常用的转义字符:
\n - 换行
\t - 水平制表符(相当于按一次tab键)
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠
\u四位的十六进制数 - 编码字符
str5 = 'abcKH1234,😁'
print(str5)
并不是\和所有符号组合都可以变成转义字符
str6 = '\m\k\l'
print(str6) # \m\k\l
有一些C语言中的转义字符,在其他编程语言中无效
str7 = '=\a=\f='
print(str7)
str8 = '\tabc\n123'
print(str8)
str9 = 'it\'s me'
str10 = "it's me"
str11 = "i say: \"you see see, one day day!\""
print(str11)
str12 = 'i say: \"you see see, one day day!\"'
str13 = '\\name\yuting\论文.txt'
print(str13)
编码字符
str14 = '\u4e01abc'
print(str14)
#丁abc
3.r-string(r字符串)
在字符串的最前面加r或者R,可以让字符串中所有的转义字符功能消失(让字符串中的所有字符自动变成普通字符)
str1 = r'\tabc\n123\''
print(str1) #\tabc\n123\'
path = R'C:\ser\test\name\yuting\demo\t.txt'
print(path) #C:\ser\test\name\yuting\demo\t.txt
二、字符编码
1. 编码值
计算机存储数据的时候只能存数字(存的是数字对应的二进制的补码);
为了能够让计算机存储字符,给每个字符对应一个固定的数字,每次需要存储这个字符的时候就去存这个数字;
每个字符对应的那个数字就是这个字符的编码值。
2.编码表 - 保存不同字符对应的编码值的表
1)ASCII码表 - 有128个字符对应的编码值(只要包含英文符号和其他西欧语言对应的符号)
数字字符0~9从48开始连续递增
大写字母A~Z从65开始连续递增
小写字母a~z从97开始连续递增
2)Unicode编码表(Python) - 是ASCII码表的扩展(包含了ASCII码表),包含了世界上所有国家所有民族所有语言的对应的符号(统一码、万国码)
中文范围:4e00 ~ 9fa5
3.Python程序对编码值的应用
1)chr(编码值) - 获取指定编码值对应的字符
print(chr(97), chr(65))
#### 打印所有的大写字母
for x in range(65, 65+26):
print(chr(x))
print(chr(0x4e00), chr(0x9fa5))
for x in range(0x4DC0, 0x4DFF+1):
print(chr(x), end=' ')
print()
2)ord(字符) - 获取指定字符对应的编码
注意:字符指是长度为1的字符串
print(ord('牛'), ord('子'))
print(hex(20313), hex(23159))
print(ord('a'))
3)编码字符: \u四位的十六进制数
程序中给字符串提供字符的时候有两种方式:a.直接提供符号本身 b.通过字符对应的编码字符来提供(\u字符的16进制编码值)
str1 = 'a余'
str2 = '\u0061\u4f59'
print(str1, str2)
编码字符的使用场景:知道字符编码值,但是不知道字符的情况下,想要在字符串中提供这样一个字符
print('在Unicode编码表中最后一个中文是:', '\u9fa5')
三、字符串基本操作
1.查 - 获取字符串中的字符
字符串获取字符的语法和列表获取元素的语法一样。
1)获取单个字符
str1 = 'good good study! day day up!'
print(str1[3], str1[-2])
注意:不管转义字符的功能是什么,在计算字符串长度的时候一个转义字符的长度是1
str2 = '\tabc\n123\u4e00m'
print(str2[1], str2[-3])
2)切片
message = '小明的电话号码是:13678192303'
print(message[-11:]) # '13678192303'
print(message[3:-2:-2]) # ''
print(message[1:-1:2]) # '明电号是16893'
3)遍历
str3 = 'hello python!'
for x in str3:
print(x)
for x in range(len(str3)):
print(x, str3[x])
for index, item in enumerate(str3):
print(index, item)
2. 数学运算:+、*
1) 字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串(字符串拼接)
str1 = 'hello'
str2 = 'world!'
str3 = str1 + ' ' + str2
print(str3)
2) 字符串 * N - 将字符串重复N次产生一个新的字符串
str4 = str1 * 3
print(str4)
案例:提取字符串中所有数字字符
‘abc12MK89你好9’ -> ‘12899’
str1 = 'abc12MK89你好9'
new_str = ''
for x in str1:
if '0' <= x <= '9':
new_str += x
print(new_str) # '12899'
# ''+'1' -> '1' + '2' ->'12' + '8' -> '128' ...
案例:在字符串中两个字符之前插入*
str1 = 'abc12'
new_str = ''
for x in str1:
new_str += x + '*'
print(new_str[0:-1])
练习:将字符串中所有的数字字符都替换成*
str1 = 'ab2Mk89你好8'
new_str = ''
for x in str1:
if '0' <= x <= '9':
new_str += '*'
else:
new_str += x
print(new_str) # 'ab*Mk**你好*'
3.比较运算:>、<、>=、<=、==、!=
1)判断相等:两个一模一样的字符串才相等
print('abc' == 'acb') # False
2)比较大小: 两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小
已知字符x:
判断x是否是数字字符: ‘0’ <= x <= ‘9’
判断x是否是小写字母: ‘a’ <= x <= ‘z’
判断x是否是大写字母: ‘A’ <= x <= ‘Z’
判断x是否是字母: ‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断x是否是中文: ‘\u4e00’ <= x <= ‘\u9fa5’
print('MKAHDJSS' > 'abc') # False
练习:分别统计字符串中中文和大写字母的数量
str1 = 'shfa换手机223--=2MjshUj行HSJSA'
count1 = count2 = 0
for x in str1:
if '\u4e00' <= x <= '\u9fa5':
count1 += 1
elif 'A' <= x <= 'Z':
count2 += 1
print(count1, count2)
4. in 和 not in
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)
print(10 in [10, 20, 30]) # True
print([10, 20] in [10, 20, 30]) # False
print('a' in 'abc123') # True
print('abc' in 'abc123') # True
print('ab1' in 'abc123') # False
5. str(数据) - 将指定数据转换成字符串
所有类型的数据都可以转换成字符串,转换的时候是在数据的打印值外面加引号
print(100)
str(100) # '100'
list1 = [10,20,30]
print(list1) # [10, 20, 30]
str(list1) # '[10, 20, 30]'
list2 = ["abc", 100]
print(list2)
str(list2) # "['abc', 100]"
dict1 = {"a":10,'b':20, 'c':"abc"}
print(dict1)
str(dict1) # "{'a': 10, 'b': 20, 'c': 'abc'}"
四、字符串相关方法
字符串.xxx()
1. 必须掌握的字符串相关方法(一级)
1) 字符串.join(序列) - 用指定字符串将序列中元素拼接成一个字符串(序列中的元素必须是字符串)
result = '+'.join(['name', 'age', 'gender'])
print(result) # name+age+gender
result = '=='.join('abc')
print(result) # a==b==c
nums = [10, 20, 30, 40]
# '10+20+30+40'
result = '+'.join([str(x) for x in nums])
print(result) # '10+20+30+40'
list1 = [10, 'abc', '你好', 1.23, True, '手机壳']
# 'abc你好手机壳'
result = ''.join([x for x in list1 if type(x) == str])
print(result) # 'abc你好手机壳'
练习:将列表中每个元素的第一个字符提取出来形成一个新的字符串:
[‘name’, ‘age’, ‘gender’] -> ‘nag’
list1 = ['name', 'age', 'gender']
result = ''.join([x[0] for x in list1])
print(result)
2) split
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割
字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割
str1 = '123abc你好abc===abc+++'
result = str1.split('abc')
print(result) # ['123', '你好', '===', '+++']
result = str1.split('a')
print(result) # ['123', 'bc你好', 'bc===', 'bc+++']
result = str1.split('abc', 2)
print(result) # ['123', '你好', '===abc+++']
注意:如果切割点连续出现或者切割点在字符串的开头或者结果,切割的结果中会出现空串
str1 = 'abc123abcabc你好abc===abc+++abc'
result = str1.split('abc')
print(result) # ['', '123', '', '你好', '===', '+++', '']
3)字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3
字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3
message = 'how are you? i am fine! thank you! and you?'
result = message.replace('you', 'me')
print(result) # how are me? i am fine! thank me! and me?
result = message.replace('you', 'me', 1)
print(result) # how are me? i am fine! thank you! and you?
案例:删除字符串message中所有的空格符号
result = message.replace(' ', '')
print(result) # howareyou?iamfine!thankyou!andyou?
4)
字符串.strip() - 删除字符串前后两端的空白字符
字符串.strip(字符集) - 删除字符串前后两端的指定所有字符
str1 = '''
你 好,世 界
'''
result = str1.strip()
print(result)
str2 = '/+//u/重/庆a++///++//'
result = str2.strip('/+')
print(result)
5)
字符串1.find(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存在返回-1
字符串1.index(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存报错
message = 'how are you? i am fine! thank you! and you?'
print(message.find('you'), message.index('you'))
print(message.find('abc')) # -1
print(message.index(‘abc’)) # 报错
字符串1.find(字符串2, 开始下标, 结束下标) - 在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到返回-1
字符串1.index(字符串2, 开始下标, 结束下标) - 在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到报错
message = 'how are you? i am fine! thank you! and you?'
print(message.find('you', 0, 8)) # -1
print(message.find('you', 11)) # 30
字符串1.rfind(字符串2) - (从后往前找)
字符串1.rindex(字符串2) - (从后往前找)
message = 'how are you? i am fine! thank you! and you?'
print(message.rfind('you')) # 39
2.尽可能记住的字符串相关方法
1) count
2) isdigit()
3) islower()、isupper()
4)lower()、upper()
5)maketrans()、translate()
6)rjust()、ljust、center、zfill
s=‘ab,cd’
s.isdigit() 判断是不是数字字符串
s.isalpha() 判断是不是字母字符串
s.isanum() 判断是不是数字或字母字符串
ljust/rjust/center==</>/^ 左对齐、右对齐、中间对齐
s.startswith()\s.endwith() 判断开头/结尾是否为要求字体
str(list) 转换其他元素为字符串
s.split() 切割,对应某字符将字符串切割放在列表中
‘’.join(list) 将容器中元素以某符号间隔添加到字符串中
s.replace(oldStr, newStr, 替换次数(不写表示全部)) 将字符串中某元素替换
strip(‘’) 去除两端某符号