Python基础之集合(set)

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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值