第13天:Python集合

0 阅读3分钟

学习目标

理解集合的无序性、唯一性,掌握集合运算,用于管理标签或去重。

  • 练习任务

    1. 为每个联系人增加一个“标签”字段(例如:朋友、同事、家人),用集合存储标签(因为标签不重复)。
    2. 创建一个集合 all_tags 收集所有联系人的标签(使用集合的并集操作)。
    3. 实现按标签筛选联系人:输入一个标签,返回所有拥有该标签的联系人姓名。
    4. 演示集合的其他操作:求两个联系人的共同标签(交集)、为某联系人添加多个标签时自动去重。
    5. 可选:使用集合快速检查某个标签是否存在。

集合

集合是一个无序不重复的序列,集合中不会出现重复的元素,并且可以进行并集、交集等运算。

创建集合

使用大括号创建集合,元素之间用逗号隔开。也可以使用set()函数创建的集合

parame=[1,2,3,4}

创建空集合

为了防止与{}大括号,创建字典重复,创建集合需要使用set()

a=set()

集合间的运算

-:差集、|:并集、&:交集、对称差集。

image.png

集合基本操作

添加元素

add

语法:集合名.add(要添加的元素)
如果元素已存在,则不进行任何操作

image.png

update

用来添加元素,但是参数可以是列表、元组、字典等
语法:集合名.update(要添加的元素)

image.png

删除元素

remove

删除指定元素,不存在时会报错。
语法:s.remove(x)
s:集合 x:要删除的元素

image.png

discard

删除指定元素,元素不存在时,不会报错
语法:s.discard(x)

image.png

pop

随机删除集合中的一个元素,每次运行的结果不同
因为每次运行集合都会对集合进行随机排列,然后删除左边第一个元素。

image.png

clear

清空所有元素

image.png

计算集合个数

使用len方法可以计算集合的个数

image.png

判断元素是否在集合中

使用in
语法:x in s

image.png

练习任务

为每个联系人增加一个“标签”字段(例如:朋友、同事、家人),用集合存储标签(因为标签不重复)。

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}")