day9-字符串
一、数字集合运算符
python中的集合和数学中的集合是一个东西,并且支持数学集合运算:交集、并集、差集、对称差集、子集、真子集
1、交集 - & (求两个集合的公共部分)
A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A & B) # {2, 4, 5}
2、并集 - | (将两个集合合并成一个集合)
A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A | B) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
3、差集 - B - A (去掉之和中被包含在另外一个集合中的部分剩下的部分)
A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A - B) # {1, 3, 6}
print(B - A) # {8, 9, 7}
4、对称差集 - ^ ( 合并两个集合后看去掉公告的部分)
A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A ^ B) # {1, 3, 6, 7, 8, 9}
5、子集(>=、<=)和真子集(>、<)
# {1,2,3}的子集:{}、{1}、{2}、{3}、{1、2}、{1、3}、{2、3}、{1、2、3}
# {1,2,3}的真子集:{}、{1}、{2}、{3}、{1、2}、{1、3}、{2、3}
# A > B - 判断B是否是A的真子集
# A < B - 判断A是否是B的真子集
# A >= B - 判断B是否是A的子集
# A <= B - 判断A是否是B的子集
# 注意:空集合不是{}({}是空字典),空集合是:set()
print({100, 200, 300} > {1, 2}) # False
print({100, 200, 300} > set()) # True
print({100, 200, 300} > {100, 300}) # True
6、练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
math = {'stu1', 'stu2', 'stu3', 'stu4', 'stu5'}
english = {'stu2', 'stu3', 'stu6', 'stu7', 'stu8'}
chiese = {'stu2', 'stu6', 'stu7', 'stu9', 'stu10'}
# a. 求选课学生总共有多少人
D = math | english | chiese
print(f'选课学生总共有{len(D)}人')
# b. 求只选了第一个学科的人的数量和对应的名字
F = math - english - chiese
print(f'只选了第一个学科的人的数量为{len(F)}和对应的名字{F}')
# e. 求选了三门学科的学生的数量和对应的名字
G = math & english & chiese
print(f'选了三门学科的学生的数量为{len(G)}和对应的名字{G}')
# c. 求只选了一门学科的学生的数量和对应的名字
H = F | (english - chiese - math) | (chiese - english - math)
print(f'只选了一门学科的人的数量为{len(H)}和对应的名字{H}')
# d. 求只选了两门学科的学生的数量和对应的名字
J = (math & english - chiese) | (math & chiese - english) | (english & chiese - math)
print(f'只选了两门学科的人的数量为{len(J)}和对应的名字{J}')
二、字符串和字符
1、字符串(str)
(1)容器型数据类型(一种同时保存文字符号的容器);将引号(既可以是一个引号开头和结尾,也可以是三个单引号或者双引号开头和结尾)作为容器的标志
(2)字符串是不可变;字符串是有序的
(3)字符串中的元素可以是任何文字符号
str1 = 'abc'
str2 = "abc"
str3 = '''abc'''
str4 = """abc"""
# 三个引号开头结尾的字符串可以直接换行
str6 = '''abc
123'''
print(str6)
'''
abc
123
'''
str7 = 'abc\n123'
print(str7)
'''
abc
123
'''
# 空串
str8 = ''
2、转义字符
字符串中的每个独立的字符串的元素,又叫字符;字符串的字符分为两种;普通字符、转义字符
(1)普通字符:在字符串中表示符号本身的字符就是普通字符
(2)转义字符:在特定符号前加\表示特殊意义的字符就是转义字符
常用的转义字符:
\n - 换行
\t - 水平制表符(相当于按了tab键)
\ ’ - 普通的单引号
\ " - 普通的双引号
\ \ - 一个反斜杠
注意:在计算字符串长度的时候一个转义字符的长度是1
print('abc和123...') # abc和123...
print('\k\n123')
print('\a你好')
print('\a你好\b')
print('\tabc\n123')
# it's me
print('it\'s me')
print("it's me")
# I say:"good good study,day day up!"
print("I say:\"good good study,day day up!\"")
print('I say:"good good study,day day up!"')
print('\\abc')
str1 = '\tab\n234\\'
print(len(str1)) # 8
3、r字符串
在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(r可以让字符串中的所有字符都变成普通字符),主要用于路径
str2 = r'\tab\n234\\'
print(str2) # \tab\n234\\
path = r'c:\name\abc\best\code\test.py'
print(path) # c:\name\abc\best\code\test.py
三、字符编码
1、字符编码
计算机只具备保存数字的能力,为了能够让计算估计存储文字符号,给每个字符对应了一个固定的数字,每次在需要存储文字符号的时候就存储这个符号对应的数字。
每个字符对应的那个固定的数字,就是这个字符的编码值。
2、编码表 - 保存每个文字字符和对应的编码值的表
常用的编码值有两种:ASCII码表,Unicode编码表(Python)
(1)ASCII码表:
- 只有128个字符(全是美国常用的符号)
- 数字字符在大写字母前面
- 大写字母在小写字母前面
- 字符和数字字符都是连续递增
- 大写字母和小写字母之间有间隙
- (0-48;A-65;a-97)
(2)Unicode编码表
- Unicode编码表中前128个字符就是ASCII码表中的字符
- Unicode编码表包含世界上所有的国家所有的民族所有的语言的符号(万国码)
- 中文编码范围:4e00~9fa5
3、编码值python中应用
(1)chr函数
- chr(编码值) - 获取编码值对应的字符
print(chr(97)) # a
print(chr(65)) # A
# 注意:如果是16进制的编码值,在使用的时候必须加前缀’0x'、‘0X'
print(chr(0x4e00)) # 一
print(chr(0x9fa5)) # 龥
- 打印所有的中文
for i in range(0x4e00, 0x9fa5 + 1):
print(chr(i), end=' ')
print()
(2)ord函数
ord(字符) - 获取指定字符对应的编码值
# 注意:字符值得是长度为1的字符串
print(ord('a')) # 97
print(ord('李')) # 26446
(3)编码字符
在字符串中表示字符有两种方法:直接提供字符、提供编码字符
str1 = '-\u4e00'
print(str1) # -一
str2 = 'a=\u0061'
print(str2) # a=a
char1 = '心'
print('\u4e00' <= char1 <= '\u9fa5') # True
四、字符串基本操作
1、符串查操作 - 获取字符
字符串获取字符和列表获取元素的语法一样
(1)查单个:字符串[下标]
str1 = 'hello world!'
print(str1[0], str1[-1], str1[4])
(2)字符串切片
str1 = 'hello world!'
print(str1[1:-1:-2])
print(str1[1:-3])
print(str1[2:])
(3)遍历
str1 = 'hello world!'
for i in str1:
print(i)
for i in range(len(str1)):
print(i, str1[i])
2、字符串相关操作
(1)字符串1 + 字符串2 - 将两个字符串合并成一个新的字符串
str1 = 'abcd'
str2 = 'hello'
str3 = str1 + str2
print(str3) # abcdhello
# 字符串的加法运算可以模拟字符串的增删改
str1 = 'abc'
new_str = ''
for i in str1:
new_str += i + '+'
print(new_str[:-1])
# 案例:删除字符串中所有的数字字符
str1 = 'ab096华师大就是看到bj363'
new_str = ''
for i in str1:
if not '0' <= i <= '9':
new_str += i
print(new_str) # ab华师大就是看到bj
(2)字符串*N - 字符串重复N次产生一个新的字符串
str1 = 'abc'
print(str1 * 4) # abcabcabcabc
(3)in 和 not in
字符串1 in 字符串2 - 判断字符串1是否字符串2的子串(判断字符串2中是否包含字符串1)
print('a' in 'abc') # True
print('ab' in 'abc') # True
print('ac' in 'abc') # False
(4)比较运算
'''
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
比较运算的应用: - 判断字符的性质
判断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('abc' == 'abc') # True
print('abc' == 'bac') # False
print('abc' > 'mn') # False
print('zbc' > 'mn') # True
print('Zbc' > 'mn') # False
3、字符串相关函数
(1)len(字符串) - 统计字符串中字符的个数
(2)str(数据) - 将指定的数据转换成字符串(所有的数据都可以转换成字符串,转换的是再数据打印值再外面加引号)
(3)str(100) - 100
list1 = [1, 2, 3]
print(list1) # [1, 2, 3]
# str(list1) # '[1, 2, 3]'
list2 = ["abc", 100]
print(list2) # ['abc', 100]
# str(list2) # "['abc', 100]"