集合
-
什么是集合(
set
)""" 集合是容器型数据类型;将{}作为容器的标志,多个元素之间用逗号隔开:{元素1, 元素2, 元素3, ...} 集合是可变的;集合是无序的 元素:必须是不可变的数据;元素是唯一的 """ # 空集合: {}不是空集合,是空字典 set1 = set() print(type(set1), len(set1)) # <class 'set'> 0 # 集合是无序的 print({1, 2, 3} == {3, 1, 2}) # True # 集合的元素必须是不可变的类型的数据(数字, 字符串, 元组) set2 = {23, 'abc', (2, 3)} print(set2) # set3 = {23, 'abc', [2, 3]} # 报错! # print(set3) # 集合的元素是唯一的 set4 = {10, 20, 30, 10, 10} print(set4) # {10, 20, 30} # 集合自带去重功能,但是只能去元素是不可变的序列的重 names = ['张三', '李四', '张三', '王二', '李四', '张三'] print(set(names)) #{'张三', '王二', '李四'}
-
集合的增删改查
-
查: 集合只能遍历
boll = {'乒乓球', '篮球', '羽毛球', '高尔夫', '网球'} for x in boll: print(x)
-
增
boll = {'乒乓球', '篮球', '羽毛球', '高尔夫', '网球'} # 集合.add(元素) - 在集合中添加指定元素 boll.add('足球') print(boll) #{'乒乓球', '篮球', '羽毛球', '高尔夫', '网球', '足球'} # 集合.update(序列) - 将序列中的元素全部添加到集合中 set5 = set() set5.update('abc') print(set5) # {'a', 'b', 'c'} set5.update({'name': '小明', 'age': 18}) print(set5) # {'name', 'c', 'age', 'b', 'a'}
-
删
boll = {'乒乓球', '篮球', '羽毛球', '高尔夫', '网球'} boll.remove('高尔夫') print(boll) # {'网球', '羽毛球', '乒乓球', '篮球'} boll.discard('网球') print(boll) # {'乒乓球', '羽毛球', '篮球'} # boll.remove('桌球') # KeyError: '桌球' boll.discard('桌球') # 不会报错
-
改 - - - 不能直接修改某个元素,只能先删除再添加
-
-
数学集合运算:交集、并集、差集、对称差集、子集和真子集
s1 = {1, 2, 3, 4, 5, 6, 7} s2 = {5, 6, 7, 8, 9} # 1)交集:& # 集合1 & 集合2 - 获取两个集合公共的部分 print(s1 & s2) # {5, 6, 7} # 2)并集:| print(s1 | s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9} # 3)差集:- # 集合1 - 集合2 - 获取在集合1中但是不在集合2中的所有的元素 print(s1 - s2) # {1, 2, 3, 4} print(s2 - s1) # {8, 9} # 4)对称差集: ^ # 集合1 ^ 集合2 - 获取只在集合1和只在集合2中的所有的元素 print(s1 ^ s2) # {1, 2, 3, 4, 8, 9} # 5)子集和真子集 # 集合1 >= 集合2 - 判断集合2是否是集合1的子集 # 集合1 > 集合2 - 判断集合2是否是集合1的真子集 print({100, 200, 300} >= {1, 2}) # False print({1, 2, 3, 100, 200} >= {1, 2}) # True
-
集合相关操作
# 1) in 和 not in print(10 in {10, 20, 30}) # True # 2)max、min、sorted、sum、set、len print(max({10, 3, 94})) # 94 print(sorted({23, 9, 89, 67, 34})) # [9, 23, 34, 67, 89] print(sum({23, 45, 78, 9})) # 155 print(len({23, 34, 56, 23, 23})) # 3
作业
1.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
math = {'小明', '小峰', '小城'}
english = {'小程', '小峰', '小宏', '小陶'}
act = {'小程', '小陶', '小峰', '小宏'}
# a.求选课学生总共有多少人
people = math | english | act
print('选课的总共有%d人'%(len(people)))
# b. 求只选了第一个学科的人的数量和对应的名字
for i in math:
print(i)
print('只选了第一个学科的人的数量', len(math))
# c. 求只选了一门学科的学生的数量和对应的名字
one_people = (math ^ english ^ act ) - (math & english & act)
for i in one_people:
print(i)
print('选择一门的学生数量:', len(one_people))
# d. 求只选了两门学科的学生的数量和对应的名字
two_people = (math & english) ^ (english & act)
for i in two_people:
print(i)
print('选择二门的学生数量:', len(two_people))
# e. 求选了三门学生的学生的数量和对应的名字
three_people = math & english & act
for i in three_people:
print(i)
print('选择三门的学生数量:', len(three_people))