学习目标
理解集合的无序性、唯一性,掌握集合运算,用于管理标签或去重。
-
练习任务:
- 为每个联系人增加一个“标签”字段(例如:朋友、同事、家人),用集合存储标签(因为标签不重复)。
- 创建一个集合
all_tags收集所有联系人的标签(使用集合的并集操作)。 - 实现按标签筛选联系人:输入一个标签,返回所有拥有该标签的联系人姓名。
- 演示集合的其他操作:求两个联系人的共同标签(交集)、为某联系人添加多个标签时自动去重。
- 可选:使用集合快速检查某个标签是否存在。
集合
集合是一个无序不重复的序列,集合中不会出现重复的元素,并且可以进行并集、交集等运算。
创建集合
使用大括号创建集合,元素之间用逗号隔开。也可以使用set()函数创建的集合
parame=[1,2,3,4}
创建空集合
为了防止与{}大括号,创建字典重复,创建集合需要使用set()
a=set()
集合间的运算
-:差集、|:并集、&:交集、对称差集。
集合基本操作
添加元素
add
语法:集合名.add(要添加的元素)
如果元素已存在,则不进行任何操作
update
用来添加元素,但是参数可以是列表、元组、字典等
语法:集合名.update(要添加的元素)
删除元素
remove
删除指定元素,不存在时会报错。
语法:s.remove(x)
s:集合 x:要删除的元素
discard
删除指定元素,元素不存在时,不会报错
语法:s.discard(x)
pop
随机删除集合中的一个元素,每次运行的结果不同
因为每次运行集合都会对集合进行随机排列,然后删除左边第一个元素。
clear
清空所有元素
计算集合个数
使用len方法可以计算集合的个数
判断元素是否在集合中
使用in
语法:x in s
练习任务
为每个联系人增加一个“标签”字段(例如:朋友、同事、家人),用集合存储标签(因为标签不重复)。
contacts = {
'张三': {'phone': '13800138000', 'email': 'zhangsan@example.com', 'address': '北京'},
'李四': {'phone': '13912345678', 'email': 'lisi@example.com', 'address': '上海'}
```
'赵四': {'phone': '13912345678', 'email': 'lisi@example.com', 'address': '上海',"relation":{'同事','家人'}},
'王五': {'phone': '13912345678', 'email': 'lisi@example.com', 'address': '上海',"relation":{'同事','朋友'}},
'刘三': {'phone': '13912345678', 'email': 'lisi@example.com', 'address': '上海',"relation":{'同事'}}
} contacts["张三"]['relation']={"朋友"} contacts["李四"]['relation']={"家人"}
创建一个集合 `all_tags` 收集所有联系人的标签(使用集合的并集操作)。
```python
all_tags=set()
for k,v in contacts.items():
for k1,v1 in v.items():
if k1=="relation":
all_tags.update(contacts[k][k1])
实现按标签筛选联系人:输入一个标签,返回所有拥有该标签的联系人姓名。
rel=input("请输入一个标签:")
for k,v in contacts.items():
if rel in v["relation"]:
print(k)
演示集合的其他操作:求两个联系人的共同标签(交集)、为某联系人添加多个标签时自动去重。
contacts['赵四']['relation']& contacts['王五']['relation']
可选:使用集合快速检查某个标签是否存在。
test_tags=['同事', '家人', '朋友', '同学']
for tag in test_tags:
exists=tag in all_tags
print(f"标签{tag}是否存在:{exists}")