跳到主要内容

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{}不重复、无序去重、判断存在、交并差

练习

  1. 把列表 ["a", "b", "a", "c", "b"] 去重后打印。
  2. 你的爱好是 {"篮球", "音乐", "编程"},朋友的爱好是 {"音乐", "游戏"}。找出:共同爱好、你们俩加起来的所有爱好。
点击查看答案
# 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 函数入门