4.4 集合 set
集合(set)的两大特点:不重复、无顺序。最常见的用途就是去重。
创建集合
用花括号 {}(但没有键值对,和字典区分开):
tags = {"红", "绿", "蓝"}
# 重复的元素会被自动去掉
nums = {1, 2, 2, 3, 3, 3}
print(nums) # {1, 2, 3}
# ⚠️ 空集合必须用 set(),因为 {} 是空字典
empty = set()
一行代码去重
这是集合最高频的用法——把列表转成集合再转回来:
nums = [1, 5, 2, 1, 3, 5, 5]
unique = list(set(nums))
print(unique) # [1, 2, 3, 5](顺序可能变化)
基本操作
tags = {"红", "绿"}
tags.add("蓝") # 添加
tags.remove("红") # 删除(不存在会报错)
tags.discard("紫") # 删除(不存在也不报错)
print("绿" in tags) # True,判断存在(集合做这个判断非常快)
print(len(tags)) # 2
集合没有索引,tags[0] 会报错——因为它是无序的。想逐个处理就用 for 遍历。
集合运算:交集、并集、差集
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a & b) # {3, 4} 交集:两边都有的
print(a | b) # {1,2,3,4,5,6} 并集:合起来(自动去重)
print(a - b) # {1, 2} 差集:a 有 b 没有的
实际场景:
python_class = {"小明", "小红", "小刚"}
english_class = {"小红", "小丽"}
print("两门都报的:", python_class & english_class) # {'小红'}
print("只报了Python的:", python_class - english_class)
四种数据结构怎么选
| 结构 | 符号 | 特点 | 典型场景 |
|---|---|---|---|
| 列表 list | [] | 有序、可改、可重复 | 一串数据(默认首选) |
| 元组 tuple | () | 有序、不可改 | 固定不变的数据 |
| 字典 dict | {k: v} | 键值对、按键查值 | 有"名字"的数据、计数 |
| 集合 set | {} | 不重复、无序 | 去重、判断存在、交并差 |
练习
- 把列表
["a", "b", "a", "c", "b"]去重后打印。 - 你的爱好是
{"篮球", "音乐", "编程"},朋友的爱好是{"音乐", "游戏"}。找出:共同爱好、你们俩加起来的所有爱好。
点击查看答案
# 1
items = ["a", "b", "a", "c", "b"]
print(list(set(items)))
# 2
mine = {"篮球", "音乐", "编程"}
friend = {"音乐", "游戏"}
print("共同爱好:", mine & friend)
print("所有爱好:", mine | friend)
本章小结
- 集合自动去重,
list(set(lst))是去重口诀 - 空集合用
set(),{}是空字典 &交集、|并集、-差集
数据结构学完了!下一章学习编程中最重要的概念之一:5.1 函数入门