1.数学集合运算
python中的集合和数学中的集合是一个东西,并且支持数学集合运算:交集、并集、差集、对称差集、子集、真子集
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8, 9, 10}
# 1.求交集(&) - 求两个集合的公共部分
print(A & B) # {4, 5, 6}
# 2.求并集(|) - 将两个集合合并成一个集合
print(A | B) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 3.求差集(-) - 去掉一个集合中包含在另外一个集合的部分剩下的部分
print(A - B) # {1, 2, 3}
print(B - A) # {8, 9, 10, 7}
# 4.求对称差集(^) - 合并两个集合后去掉公共的部分
print(A ^ B) # {1, 2, 3, 7, 8, 9, 10}
# 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
# 练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
A = {'小明', '小华', '小新', '小虎'}
B = {'小梅', '小明', '小虎', '大熊'}
C = {'小新', '大明', '二明', '小虎', '静香'}
# a. 求选课学生总共有多少人
print(len(A | B | C))
H = A | B | C
# b. 求只选了第一个学科的人的数量和对应的名字
D = A - B - C
print(len(D), D)
# c. 求选了三门学科的学生的数量和对应的名字
E = A & B & C
print(len(E), E)
# d. 求只选了一门学科的学生的数量和对应的名字
# 方法1
F = (A - B - C) | (B - C - A) | (C - A - B)
print(len(F), F)
# 方法2
F1 = A ^ B ^ C - E
print(len(F1), F1)
# e. 求只选了两门学科的学生的数量和对应的名字
# 方法1
G = (A & B - C) | (A & C - B) | (B & C - A)
print(len(G), G)
# 方法2
G1 = H - E - F
print(len(G1), G1)
2.字符串和字符
1.什么是字符串(str)
"""
1)容器型数据类型(一种同时保存多个文字符号的容器);
将引号(既可以是一个引号开头和结尾,也可以是三个引号开头和结尾)作为容器的标志,里面的每个符号就是字符串的元素
2)字符串是不可变的;字符串是有序的
3)字符串中的元素可以是任何文字符号,字符串的元素又叫字符
"""
str1 = 'abc'
str2 = "abc"
str3 = '''abc'''
str4 = """abc"""
print(type(str1), type(str2), type(str3), type(str4))
str5 = 'mn.,%*&笑脸'
# 三个引号开始结婚的字符串可以直接换行
str6 = '''abc
123'''
print(str6)
str7 = 'abc\n123'
print(str7)
def func():
"""注释"""
"""字符串"""
class A():
"""注释"""
"""字符串"""
# 空串
str8 = ''
2.转义字符
"""
字符串中的每个独立的符号就是字符串的元素,又叫字符;字符串中的字符分成两种:普通字符、转义字符
1)普通字符:在字符串中表示符号本身的字符就是普通字符
2)转义字符:在特定符号前加\表示特殊意义或者特殊功能的字符就是转义字符
常用的转义字符:
\n - 换行
\t - 水平制表符(相当于按了tab键)
\' - 普通的单引号
\" - 普通的双引号
\\ - 一个反斜杠
注意:在计算字符串长度的时候一个转义字符的长度是1
"""
print('\k\n123')
# \k
# 123
print('\a你好\b')
print('-----------------------------------------------分割线-----------------------------------------------------------')
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 = '\tabc\n123\\你好'
print(len(str1))
3. r字符串
# 在字符串的最前面加r或者R,可以让字符串中所以转义字符的功能消失(r可以让字符串中所以的字符都变成普通字符)
str2 = '\tabc\n123\'=\"\\='
print(str2)
str3 = r'\tabc\n123\'=\"\\='
print(str3)
3.字符编码
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 x in range(0x4e00, 0x9fa5+1):
# print(chr(x), end='')
# 2)ord函数
# ord(字符) - 获取指定字符对应的编码值
# 注意:字符指的是长度为1的字符串
print(ord('范')) # 33539
# 3)编码字符
# 在字符串中表示字符有两种方法:直接提供字符、提供编码字符
# 编码字符:\u4位的14进制编码值
str1 = '一\u4e00'
print(str1)
str2 = 'a=\u0061'
print(str2)
c1 = 'k'
print('\u4e00' <= c1 <= '\u9fa5') # False
c2 = '快'
print('\u4e00' <= c2 <= '\u9fa5') # True
4.字符串基本操作
1.字符串查操作 - 获取字符
# 字符串获取字符和列表获取元素的语法一样
# 1)查单个:字符串[下标]
str1 = 'hello world!'
print(str1[0], str1[-1], str1[4])
# 2)字符串切片
str1 = 'hello world!'
print(str1[1:-1:-2]) # ''
print(str1[1:-1:2]) # 'el ol'
print(str1[1:-3]) # 'ello wor'
print(str1[2:]) # 'llo world!'
# 3)遍历
str1 = 'hello world!'
for x in str1:
print(x)
for x in range(len(str1)):
print(x, str1[x])
2.字符串相关操作
# 1)字符串1 + 字符串2 - 将两个字符串合并成一个新的字符串
str1 = 'abc'
str2 = 'hello'
str3 = str1 + str2
print(str3) # 'abchello'
# 字符串的加法运算可以模拟字符串的增删改
str1 = 'abc'
new_str = str1 + 'd'
print(new_str) # abcd
# 案例1:字符串中增加+
str1 = 'abc'
new_str = ''
for x in str1:
new_str += x + '+'
print(new_str[:-1]) # a+b+c
# 案例2:删除字符串中所有的数字字符
str1 = 'adha1214s金新时代'
new_str = ''
for x in str1:
if not '0' <= x <= '9':
new_str += x
print(new_str) # adhas金新时代
# 案例3:将字符串中所有的数字字符改成*
str1 = 'adha1214s金新时代'
new_str = ''
for x in str1:
if not '0' <= x <= '9':
new_str += x
else:
new_str += '*'
print(new_str) # adha****s金新时代
# 2)字符串 * N - 字符串重复N次产生一个新的字符串
str1 = 'abc'
print(str1 * 3) # abcabcabc
# 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(数据) - 将指定的数据转换成字符串(所有的数据都可以转换成字符串,转换后的时候在数据打印值外面加引号)
# str(100) - '100'
list1 = [10,20,30]
print(list1) # [10, 20, 30]
# str(list1) # '[10, 20, 30]'
list2 = ["abc", 100]
print(list2) # ['abc', 100]
# str(list2) # "['abc', 100]"