Day8 字符串
字符串和字符
1.什么是字符串
容器:将’’、""、’’’’’’、""""""作为容器的表示,里面的每个独立的文字信息就是它的元素(引号中的每个符号都是字符串的元素)
元素:引号中的每个符号都是元素,字符串的元素又叫字符
不可变(不支持增删改);有序的(支持下标操作)
s1 = 'a6,你好'
s2 = "数ks022123"
s3 = '❀♥🌹'
print(type(s1), type(s2), type(s3)) # <class 'str'> <class 'str'> <class 'str'>
s4 = '''abc'''
s5 = """abc123"""
print(type(s4), type(s5)) # <class 'str'> <class 'str'>
‘’'和"""对应的字符串可以在内容中直接通过回车换行
s7 = '''abc
123
你好吗?'''
print(s7)
2.字符
Python中只有字符的概念,没有对应的数据类型。如果需要字符用长度是1的字符串来表示
1)转义字符
字符串中的元素/符号/字符分为两种:有一种是普通字符,另外一种是转义字符
a.普通字符 - 除了转义字符以外的字符都属于普通字符;普通字符在字符串中表示这个符号本身
b.转义字符 - 通过 \加其他字符 的形式存在,它在字符串中有特殊功能或者特殊意义
# \n - 换行(相当于按一下回车)
# \t - 水平制表符(相当于按一下tab键)
# \' - 表示一个单引号
# \" - 表示一个双引号
# \\ - 表示一个反斜杠
# \u四位的16进制数 - 表示四位16进制数作为编码值对应的字符(编码字符)
3.字符编码
1)计算机能直接存储的数据只有数字,而且存的是数字的补码。
2)文本数据没有办法直接存到计算中,计算在保存文本数据的时候,存的其实是每个文本符号对应的数字(对计算机来讲,每个文本符号都会对应一个固体的数字),每一个文本符号对应的数字就是这个符号的编码值
3)字符编码表:ASCII码表、Unicode编码表
编码表中保存的就是每个符号和数字之间的一一对应关系
ASCII码表:
a.总共128个字符,每个字符对应你的编码范围:0~127(只有美国人用的符号)
b.数字在字母的前面;大写字母在小写字母前面;大写字母和小写字母没有紧挨着
Unicode编码表:
a.Unicode编码表示ASCII码表的扩展
b.中文编码范围:4e00 ~ 9fa5
c.Python采用的Unicode编码表
4.编码值的使用
1)编码字符:\u编码值
print('\u4e00~\u9fa5') # 一~龥
print('a\u0061') # aa -> 61是a的16进制编码值
print('\u096f\u097f') # ९ॿ
print('\u1100\u114f') # ᄀᅏ
2)chr(编码值) - 获取指定编码值对应的字符
print(chr(0x4e00)) # 一
print(chr(97)) # a
print(chr(0x56ef)) # 囯
3)ord(字符) - 获取字符编码值
print(ord('余'), ord('婷')) # 20313 23159
print(hex(ord('余')), hex(ord('婷'))) # 4f59 5a77
获取字符
1.获取字符
字符串获取字符的语法和列表获取元素的语法一样
1)获取单个字符
字符串[下标]
str1 = 'hello python!'
print(str1[1], str1[-1])
a.一个空格是一个字符
str2 = 'abc 123'
print(str2[4]) # 1
str3 = 'abc 123'
print(str3[5]) # 1
b.一个转义字符是一个字符(一个转义字符的长度是1)
str4 = 'abc\n123'
print(str4[4]) # 1
str5 = '\tabc123'
print(str5[1]) # a
str6 = ' abc123'
print(str6[4]) # a
str7 = '\u4e00abc'
print(str7[1]) # a
2)切片
message = 'Really get to know yourself before you make any decision.'
print(message[-5:]) # 'sion.'
print(message[1:6:2]) # 'ely'
print(message[::-1])
print(message[:-5:-1]) # .noi
3)遍历
for x in 'ab\u4e00c':
print(x)
for index in range(len(message)):
print('字符:', message[index])
for index, item in enumerate(message):
print(index, item)
字符串相关
1.数学运算符:+,*
1)字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2) # 'abc123'
name = '张三'
age = 18
# xxx今年xx岁!
message = name+'今年'+str(age)+'岁!'
print(message)
2)字符串* N / N * 字符串 - 字符串重复N次产生一个新的字符串
print('abc'*2)
print('hello world!\n' * 10)
2.比较运算符
1)==、!=
print('abc' == 'abc') # age
print('abc' == 'acb') # False
2)>、<、>=、<=
字符串1 > 字符串2
两个字符串比较大小,比较的是第一对不相等的字符的大小。(两个字符比较大小比较的是字符的编码值的大小)
print('abc' > '123456') # True
print('Abc' > 'abc') # False
print('余婷' > 'hello world!') # True
比较运算符的应用:判断字符的类型
"""
是否是数字: 48 <= ord(字符) <= 57 / '0' <= 字符 <= '9'
是否是大写字母: 'A' <= 字符 <= 'Z'
是否是小写字母: 'a' <= 字符 <= 'z'
是否是字母:'A' <= 字符 <= 'Z' or 'a' <= 字符 <= 'z'
是否是中文:'\u4e00' <= 字符 <= '\u9fa5'
"""
3. in 和 not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串
print('a' in 'abc') # True
print('Z' in 'abc') # False
print('abc' in 'a1b2c3') # False
print('abc' in '123abc舒克舒克') # True
4.相关函数
max,min,sorted,len
print(max('jskm'))
print(sorted('jskm')) # ['j', 'k', 'm', 's']
print(len('abc')) # 3
print(len('\tabc\n123')) # 8
str(数据) - 将数据转换成字符串
所有类型数据都可以转换成字符串;数据转换成字符串的时候,是直接在数据打印值最外层加引号
# 100 -> '100'
# 12.5 -> '12.5'
# [10, 20, 30] -> '[10, 20, 30]'
# ['abc', 10, 20] -> "['abc', 10, 20] "
# {'name': '张三', 'age': 18} -> "{'name': '张三', 'age': 18}"
list1 = ['abc', 10, 20]
list1_str = str(list1)
list2 = list(list1_str)
print(list2) # ['[', "'", 'a', 'b', 'c', "'", ',', ' ', '1', '0', ',', ' ', '2', '0', ']']
eval函数 - 将列表格式的字符串转化成列表或者将字典格式的字符串转换成字典…
str5 = "['abc', 10, 20] "
list2 = eval(str5)
print(list2, type(list2)) # ['abc', 10, 20] <class 'list'>
print(list2[0])
dict1 = eval("{'name': '张三', 'age': 18}")
print(dict1, type(dict1)) # {'name': '张三', 'age': 18} <class 'dict'>
tuple1 = eval('(10, 20, 30)')
print(tuple1, type(tuple1)) # (10, 20, 30) <class 'tuple'>
result = eval('[10, "abc", 123]')
print(result, type(result))
字符串相关方法
1.字符串1.count(字符串2)
统计字符串2在字符串1只出现的次数
str1 = 'abmsidssasiissddd'
print(str1.count('a'))
print(str1.count('ss'))
print('how are you! and you?'.count('you')) # 2
2.字符串1.index(字符串2)
查找字符串2第一次出现在字符串1只的位置,以正的下标值返回
message = 'how are you! and you? and'
print(message.index('y')) # 8
print(message.index('and')) # 13
# print(message.index('anm')) # ValueError: substring not found
3.字符串.join(序列)
将序列中的元素通过字符串连接产生一个新的字符串
注意:序列中的元素必须是字符串
list1 = ['how', 'are', 'you']
print(str(list1)) # "['how', 'are', 'you']"
result = ''.join(list1)
print(result) # howareyou
result = ' '.join(list1)
print(result) # how are you
result = '加上'.join(list1)
print(result) # how加上are加上you
result = '+'.join('abc')
print(result) # a+b+c
4.split
字符串1.split(字符串2) - 将字符串1只所有的字符串2作为切割点对字符串进行切割,返回切完后每一段对应的列表
字符串1.split(字符串2,N) - 讲字符串1中前N个字符串2作为切割点
message = 'how are you!'
result = message.split(' ')
print(result) # ['how', 'are', 'you!']
print('000abc123abc456abc789'.split('abc')) # ['000', '123', '456', '789']
注意:切分点在字符串两端或者切割点连续出现都可能产生空串
print('abc123abc456abc789'.split('abc')) # ['', '123', '456', '789']
print('123abcabc345'.split('abc')) # ['123', '', '345']
list2 = ['', '123', '456', '', '789', '']
new_list2 = [x for x in list2 if x]
print(new_list2)
5.replace
字符串1.replace(字符串2,字符串3) - 将字符串1中的字符串2都替换成字符串3
字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2替换成字符串3
str2 = 'abc123andyou'
print(str2.replace('a', 'B')) # Bbc123Bndyou
print(str2.replace('123', '321')) # abc321andyou