Python从入门到精通Day8
1.集合(set)
1)什么是集合(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))
2)增删改查
2.1 查: 集合只能遍历
boll = {'乒乓球', '篮球', '羽毛球', '高尔夫', '网球'}
for x in boll:
print(x)
2.2 增
# 集合.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'}
2.3 删
# 集合.remove(元素) - 删除指定元素,如果元素不存在就报错
# 集合.discard(元素) - 删除指定元素,如果元素不存在不报错
boll = {'乒乓球', '篮球', '羽毛球', '高尔夫', '网球'}
boll.remove('高尔夫')
print(boll) # {'网球', '羽毛球', '乒乓球', '篮球'}
boll.discard('网球')
print(boll) # {'乒乓球', '羽毛球', '篮球'}
# boll.remove('桌球') # KeyError: '桌球'
boll.discard('桌球')
2.4 改 - 不能直接修改某个元素,只能先删除再添加
3)数学集合运算:交集、并集、差集、对称差集、子集和真子集
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
4.集合相关操作
# 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
5. 小练习
# 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
python = {'stu1', 'stu4', 'stu5', 'stu7', 'stu9', 'stu11', 'stu12'}
java = {'stu2', 'stu3', 'stu4', 'stu5', 'stu8', 'stu10', 'stu12'}
h5 = {'stu2', 'stu4', 'stu6', 'stu8', 'stu9', 'stu12'}
# a. 求选课学生总共有多少人
s1 = python | java | h5
print('选课学生总人数:', len(s1))
# b. 求只选了第一个学科的人的数量和对应的名字
s2 = python - java - h5
print('只选了第一个学科的人:', s2)
# e. 求选了三门学生的学生的数量和对应的名字
s3 = python & java & h5
print('选了三门学生的学生:', s3)
# c.求只选了一门学科的学生的数量和对应的名字
s4 = (python ^ java ^ h5) - s3
print('只选了一门学科的学生:', s4)
# d. 求只选了两门学科的学生的数量和对应的名字
s5 = s1 - s3 - s4
print('只选了两门学科的学生:', s5)