-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPython Data Structure Sec.3.py
More file actions
157 lines (128 loc) · 8.33 KB
/
Copy pathPython Data Structure Sec.3.py
File metadata and controls
157 lines (128 loc) · 8.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#创建集合并进行集合运算
#1创建集合
#Python中的集合类型数据结构是将各不相同的不可变数据对象无序地集中起来的容器。类似于字典中的键,
# 集合中的元素都是不可重复的,并且属于不可变数据类型,元素之间没有排列顺序。
#Python中的集合类型相当于数学集合论中所定义的集合,人们可以对集合对象进行数学集合运算。
#(1)可变集合
#可变集合对象属于可变数据类型,可以进行元素的增添、删除等处理,处理结果直接作用在对象上。使用花括号可以创建可变集合,
#传入的元素必须是不可变数据类型,即不能传入列表、字典或可变集合等。
#可变集合的set函数能够将数据结构对象转换为可变集合类型,
# 即将集合元素存储为一个列表或元组,再将其转换为可变集合。创建可变集合的应用示例如下。
"""
# 使用花括号创建可变集合
myset1 = {'A', 'C', 'D', 'B', 'A', 'B'}
print(myset1)
# 使用set函数创建可变集合
myset2 = set([2, 3, 1, 4, False, 2.5, 'one'])
print(myset2)
empty_set = set() # 创建空可变集合
print(empty_set)
print(type(empty_set))
#(2)不可变集合
# 不可变集合对象属于不可变数据类型,不能对其中的元素进行修改。
# 创建不可变集合的方法是使用frozenset函数。其返回的结果是一个不可变集合。
#传入的元素必须为不可变数据类型。当使用frozenset函数且不传入任何参数时,
# 会创建一个空不可变集合。创建不可变集合的应用示例如下。
myset3 = frozenset([3, 2, 3, 'one', frozenset([1, 2]), True])
# 使用frozenset函数创建不可变集合
print(myset3)
empty_frozenset = frozenset() # 创建空不可变集合
print(empty_frozenset)
print(type(empty_frozenset))
#2集合运算
#集合是由互不相同的元素构成的无序整体。
#集合涉及多种运算,通过这些运算能得到满足某些条件的元素的集合。
# 常用 的集合运算包括求并集、求交集、求差集、求异或集等。
#例如,学生A喜欢的运动项目的集合为{'足球', '游泳', '羽毛球', '乒乓球'},
# 而学生B喜欢的运动项目的集合为{'篮球', '乒乓球', '羽毛球', '排球'},
# 要获取两个学生都喜欢的运动项目,或获取除了学生B喜欢的运动项目外,还有哪些运动项目是学生A喜欢的,
# 即可通过集合运算来实现。
# (1)并集
# 由属于集合A和B的所有元素组成的集合称为集合A和B的并集,数学表达式为或。 并集与集合A和B之间的关系如下图,
# 其中阴影部分即为并集。
# 根据并集的数学定义,上述例子中,集合A和集合B的并集为{'足球', '游泳',
# '羽毛球', '乒乓球', '篮球', '排球'}, 它表示学生A和B都喜欢的运动项目。
# 在Python中可以使用符号“|”或集合方法union()求出两个集合的并集,示例代码如下。
A = {'足球', '游泳', '羽毛球', '乒乓球'}
B = {'篮球', '乒乓球', '羽毛球', '排球'}
print(A | B) # 使用符号"|"获取并集
print(A.union(B)) # 使用集合方法union()获取并集
#(2)交集
# 同时属于集合A和B的元素组成的集合称为集合A和B的交集,交集与集合A和B之间的关系如下图,其中阴影部分即交集。
#由交集的定义可知,学生A和B都喜欢的运动项目的集合为{'羽毛球', '乒乓球'}。
# 可以使用符号“&”或集合方法intersection()求出两个集合的交集,示例代码如下。
print(A & B) # 使用符号“&”获取交集
print(A.intersection(B)) # 使用集合方法intersection()获取交集
#(3)差集
#由属于集合A但不属于集合B中的元素所组成的集合称为集合A和B的差集。
# 差集与集合A和B之间的关系如下图,其中阴影部分即差集A-B。
#除学生A、B都喜欢的运动项目外,若需要知道学生A还喜欢哪些项目,可以通过求差集A-B来获取。
# 在Python中可以使用减号“-”或集合方法difference()求出两个集合的差集,示例代码如下。
print(A - B) # 使用减号“-”获取差集
print(A.difference(B)) # 使用集合方法difference()获取差集
#(4)异或集
#由属于集合A或集合B但不同时属于集合A和B的元素所组成的集合,称为集合A和B的异或集,
# 其相当于。异或集与集合A和B之间的关系如下图,其中阴影部分即异或集。
#通过求得例子中集合A和B的异或集,可以得知两个学生喜欢的运动项目哪些不相同。
# 在Python中可以使用符号“^”或集合方法symmetric_difference()求出两个集合的异或集,示例代码如下。
print(A^B)# 使用符号“^”获取异或集
print(A.symmetric_difference(B))
#集合之间的关系也是非常重要的。例如,现在知道学生C喜欢的运动项目为{'足球', '乒乓球', '游泳'},
# 要想大致知道学生A是否比学生C的体育爱好更广泛,此时可以使用集合关系进行判断。
#在Python中判断集合关系的常用方法和符号如下表。
#<= 或 issubset():判断一个集合是否为另一个集合的子集,即判断是否有的关系。
# 如果是,那么集合A中所有元素都是集合B中的元素
# < :判断一个集合是否为另一个集合的真子集,即判断是否有AÌB的关系。
# 如果是,那么集合B中除了包含集合A中的所有元素,还包含集合A中没有的其他元素
#>= 或 issuperset():判断一个集合是否为另一个集合的超集,即判断是否有AÊB的关系。
# 如果是,那么集合A包含集合B中的所有元素
# > ;判断一个集合是否为另一个集合的真超集,即判断是否有AÉB的关系。
# 如果是,那么集合A除了包含集合B中的所有元素,还包含集合B中没有的其他元素
#判断集合关系的方法和符号的应用
C = {'足球', '乒乓球', '游泳'}
print(C <= A) # 判断子集
print(C.issubset(A)) # 使用issubset()方法判断子集
print(C < A); print(A < A) # 判断真子集
print(A >= C) # 判断超集
print(A.issuperset(C)) # 使用issuperset()方法判断超集
print(A > C); print(C > C) # 判断真超集
#3集合常用方法和函数
#集合类型数据结构分为可变集合与不可变集合两种。
#与其他可变数据型数据对象一样,可变集合对象也可以进行元素的增添、删除、查询等处理,相关常用方法和函数如下表所示。
#add()方法;向可变集合中增添一个元素
#update()方法;向可变集合中增添其他集合的元素,即合并两个集合
#pop()方法;删除可变集合中的一个元素,当集合对象 是 空 集时,返回错误
#remove()方法;删除可变集合中指定的一个元素
#clear()方法;清空可变集合中的所有元素,返回空集
#len函数;获取集合中元素的个数
#copy()方法;复制可变集合的内容并创建一个副本对象
#可变集合常用操作
myset4 = {'red', 'green', 'blue', 'yellow'}
myset4_copy = myset4.copy() # 创建一个集合副本对象
others = {'black', 'white'}
# 可变集合增添元素
myset4.add('orange') # 使用add()方法增添元素
myset4.update(others) # 使用update()方法合并两个集合
print(myset4)
# 删除可变集合元素
print(myset4.pop()) # 使用pop()方法从集合中删除一个元素
print(myset4) # 查看删除元素后的集合内容
myset4.remove('yellow') # 使用remove()方法删除指定元素
myset4_copy.clear() # 使用clear()方法将副本对象内容清空
print(myset4_copy)
print(len(myset4)) # 使用len函数获取集合元素个数
#4【任务3-4】实现学生选课信息查询
Python_Course={'张三','李四','王五','赵六','钱七','李雷','韩梅梅'}
C_Course={'赵六','李四','麦克','张三','韩梅梅','李莉','钱七'}
#更改信息集合
C_Course.add('王五')
Python_Course.remove('王五')
print(Python_Course)
print(C_Course)
#筛选出同时选择了Python和C语言课程的学生
print(Python_Course & C_Course)
#选出选择了python但没选择C语言课程的学生、
print(Python_Course - C_Course)
#选课总人数
print(len(Python_Course|C_Course))
"""