str
)容器型数据类型; 将’‘、“”、’‘’‘’'、“”“”""作为容器标志,里面的每个符合就是字符串中的元素
元素: 可以是任何文字符号,包括:数字、字母、汉字、日语、韩语、表情符号、标点等
不可变的(不支持增删改);有序的(支持下标操作)
任何文字符号都可以是字符串的元素
str1 = '10,20,30' # 里边有8个元素
str2 = '12,=)*/DC键❀'
三个引号开头三个引号结束的字符串,在字符串中可以直接按回车换行
str3 = '123\nsdf'
print(str3)
str4 = """123
sdf"""
print(str4,type(str4))
字符 - 字符串中的元素(字符串每一个独立的符号)
字符串的字符可以分为两种: 普通字符、转义字符
**普通字符: ** 在字符串中表示符号本身的字符
转义字符: \和特定的一些符号组合在一起表示特殊功能或者意义的字符
转义字符是C语言创建的,但是很多都没有存在的价值了,目前常用的转义字符
转义字符 | 作用 |
---|---|
\n | 换行 |
\t | 水平制表符(相当于按一次tab键) |
\ ’ |
表示一个普通的单引号 |
\ " |
表示一个普通的双引号 |
\ | 表示一个普通反斜杠 |
str5 = 'abc'
print(str5) # abc
str6 = '\m\k\l'
print(str6) # \m\k\l
有一些C语言中转义字符,在其他编程语言中无效
str7 = 'ab\acde\f'
print(str7)
str8 = '\tabcdkf\n25586'
print(str8)
str9 = 'it\'s me'
str10 = "it's me"
print(str9,str10)
str11 = "I say : \"you see see, one day day\""
str12 = 'I say : \"you see see, one day day\"'
print(str11,str12,sep='\n')
str13 = '\\name\yuting\论文.txt'
print(str13)
str14 = '\u78efdjvn '
print(str14)
str14 = '\u34efdjvn '
print(str14)
str1 = '\tabc\n123'
str2 = r'\tabc\n123'
print(str1)
print(str2)
编码表是用来保存不同字符对应的编码值的表
有128个字符对应的编码值(只要包含英文符号和其他西欧语言对应的符号)
数字字符0~9从48开始连续递增 0~9 -> 48~57
大写字母A~Z从65开始连续递增 A~Z -> 65~90
大写字母a~z从97开始连续递增 a~z -> 97~122
是ASCII码表的扩展(包含了ASCII码表的数据),包含世界上所有国家和民族的语言对应符号
1. chr(编码值) - 获取指定编码值对应字符
print(chr(97),chr(65))
# 打印所有大写字母
for i in range(65,91):
print(chr(i))
print(chr(0x4e00),chr(0x9fa5))
for i in range(0x4DC0,0x4DFF+1):
print(chr(i),end='')
2. ord(字符) - 获取指定字符对应的编码
注意: 字符是长度为1的字符串
print(ord('贾'),ord('雪'),ord('静'))
print(hex(ord('贾')))
**3. 编码字符: ** \u四位的十六进制数
程序中给字符串提供字符的时候有两种方式:
a.直接提供符号本身
b.通过字符对应的编码字符来提供(\u字符的十六进制编码值)
str1 = 'a贾'
str2 = '\u0061\u8d3e'
print(str1,str2)
编码字符的使用场景∶知道字符编码值,但是不知道字符的情况下,想要在字符串中提供这样一个字符
print('在Unicode编码表中最后一个汉字:','\u9fa5')
字符串获取字符的语法和列表获取元素的语法一样
str1 = 'good good study!day day up!'
print(str1[3],str1[-2])
注意:转义字符的功能是什么,在计算字符串长度的时候,一个转义字符的长度是1
str2 = '\tadb\n123\u4e00m'
print(len(str2))
print(str2[1],str2[-3])
message ='小明的电话号码是:10086113893'
print(message[-11:]) # 10086113893
print(message[3:-2:-2]) # ''
print(message[1:-1:2]) # 明电号是10618
str3 = 'hello Python'
for i in str3:
print(i)
for i in range(len(str3)):
print(i,str3[i])
for index,item in enumerate(str3):
print(index,item)
1. 字符串 + 字符串2 - 将两个字符串合并产生一个新的字符串(字符串拼接)
str1 = 'hello'
str2 = 'world!'
str3 = str1 + ' ' + str2
print(str3)
2. 字符串 * N
str4 = str3 * 3
print(str4)
str1 = 'abc12MK89你好9'
new_str = ''
for i in str1:
if '0' <= i <= '9':
new_str += i
print(new_str)
练习:将字符串中所有的数字字符都替换成*
‘ab2Mk89你好8’ -> ‘ab*
Mk**
你好*
’
str2 = 'ab2Mk89你好8'
str3 = ''
for i in str2:
if '0' <= i <= '9':
i = '*'
str3 += i
else:
str3 += i
print(str3)
print('abc' == 'acb')
已知字符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('CSDYOM' > 'cdvq') # False
练习:统计字符串中中文和大写字母的数量
str1 = 'shfa换手机223--=2MjshUj行HSJSA'
count1 = 0
count2 = 0
for i in str1:
if '\u4e00' <= i <= '\u9fa5':
count1 += 1
elif 'A' <= i <= 'Z':
count2 += 1
print('中文数:',count1,'大写字母数:',count2)
1.**字符串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
所有类型数据都可以转换成字符串,转换的时候是在数据的打印值外面加引号(打印之后的值加引号)
print(100)
str(100) # '100'
list1 = [10,20,30]
print(list1) # [10, 20, 30]
str(list1) #'[10, 20, 30]'
样式: 字符串.xxx()
方法 | 说明 |
---|---|
字符串.join(序列) | 用指定字符串将序列中的元素拼接成字符串(序列中的元素必须是字符串才可以) |
reslut = '123'.join(['name', 'age', 'gender'])
print(reslut) # name123age123gender
reslut = '=='.join('abc')
print(reslut) # a==b==c
nums = [10, 20, 30, 40]
reslut = '+'.join([str(i) for i in nums])
print(reslut) # 10+20+30+40
list1 = [10, 'abc', '你好', 1.23, True, '手机壳']
# 'abc你好手机壳'
reslut = ''.join([i for i in list1 if type(i) == str])
print(reslut)
练习: 将列表中每个元素的第一个字符提取出来形成一个新的字符串
list1 = ['name', 'age', 'gender']
reslut = ''.join(x[0] for x in list1)
print(reslut)
方法 | 说明 |
---|---|
字符串1.split(字符串2) | 将字符串1中所有的字符串2作为切割点,对字符串1进行切割 |
字符串1.split(字符串2,N) | 将字符串1中前N个字符串2作为切割点,对字符串1进行切割 |
str1 = '123abc你好abc===abc+++'
reslut = str1.split('abc')
print(reslut) # ['123', '你好', '===', '+++']
reslut = str1.split('a')
print(reslut) # ['123', 'bc你好', 'bc===', 'bc+++']
reslut = str1.split('abc',2)
print(reslut) # ['123', '你好', '===abc+++']
str1 = 'abc123abcabc你好abc===abc+++abc'
reslut = str1.split('abc')
print(reslut) # ['', '123', '', '你好', '===', '+++', '']
注意:如果切割点连续出现,或者切割点出现在字符串开头或者结尾,切割点的结果中会出现空字符串
方法 | 说明 |
---|---|
符串1.replace(字符串2,字符串3) | 将字符串1中的所有的字符串2替换成字符串3 |
符串1.replace(字符串2,字符串3,N) | 将字符串1中前N个字符串2替换成字符串3 |
messagae = 'how are you? i am fine! thank you! and you?'
reslut = messagae.replace('you', 'me')
print(reslut) # how are me? i am fine! thank me! and me?
reslut = messagae.replace('you', 'me',1)
print(reslut) # how are me? i am fine! thank you! and you?
reslut = messagae.replace(' ', '')
print(reslut) # howareyou?iamfine!thankyou!andyou?
方法 | 说明 |
---|---|
字符串.strip() | 删除字符串前后两端的空白字符 |
字符串.strip(字符集) | 删除字符串前后两端的指定的所有字符 |
str1 = ''' 你 好, 世界 '''
reslut = str1.strip()
print(str1)
print(reslut)
str2 = '///重/庆'
reslut = str2.strip('/+')
print(reslut) # 重/庆
方法 | 说明 |
---|---|
字符串1.find(字符串2) | 获取字符串2第一次出现在字符串1中的位置 |
字符串1.index(字符串2) | 获取字符串2第一次出现在字符串1中的位置 |
messagae = 'how are you? i am fine! thank you! and you?'
print(messagae.find('you'),messagae.index('you')) # 8 8
print(messagae.find('abc')) # -1
# print(messagae.index('abc')) # 报错: substring not found
他们区别在于: 当查找不存在的字符,find返回
-1
,index回报错
方法 | 说明 |
---|---|
字符串1.find(字符串2,开始下标,结束下标) | 在字符串1指定范围内查找字符串2第一次出现的位置,如果找不到返回-1 |
字符串1.index(字符串2,开始下标,结束下标) | 在字符串1指定范围内查找字符串2第一次出现的位置,如果找不到报错 |
print(messagae.find('you', 0, 8)) # -1
print(messagae.find('you',11)) # 30
方法 | 说明 |
---|---|
字符串1.rfind(字符串2) | 从后往前找 |
字符串1.rndex(字符串2) | 从后往前找 |
print(messagae.rfind('you')) # 39