Python 集合:人生中最简单的真理,只有一次

写 Python 的人啊,迟早都会遇到一个看似不起眼的东西 ------ set(集合) 。 刚开始接触的时候,你可能觉得它没啥用,和 list 差不多嘛。 但当你真的搞懂它,就会发现:这货不仅仅是个工具,它背后其实藏着某种"生活的智慧"。

今天我们就来聊聊 Python 的集合,用最简单的方式,讲清楚它的特性、用法和哲学。


01 集合是什么?

打个比方,你去夜市买水果,摊主抓了一大袋橘子、苹果、香蕉混着给你。 回家一数:

  • 有 5 个橘子
  • 3 个苹果
  • 2 个香蕉

如果这是一个 list,那么它会老老实实地记住你买到的每一个:

ini 复制代码
fruits = ["orange", "orange", "orange", "orange", "orange", "apple", "apple", "apple", "banana", "banana"]

但如果换成 set,情况就变了。集合只会关心"你买了什么水果",而不会在乎你买了几个:

ini 复制代码
fruits = {"orange", "apple", "banana"}

要点一:集合里没有重复元素。 无论你丢多少个"橘子"进去,它都只会留一个。

再加个特点:集合里的东西是无序 的。 你去看它,今天可能是 {"banana", "orange", "apple"},明天可能就是 {"apple", "banana", "orange"},完全不保证顺序。

这就像生活:朋友也许很多,但真正的知己就那么几个,至于先遇见谁、后遇见谁,没那么重要。


02 怎么创建集合?

有两种方式:

1. 用大括号 {}

ini 复制代码
my_set = {1, 2, 3, "hello"}
print(my_set)
# 输出:{1, 2, 3, 'hello'}

2. 用 set() 函数

特别是当你有一堆重复的数据时,这招简直神器。

ini 复制代码
numbers = [1, 2, 2, 3, 4, 4, 4]
unique = set(numbers)
print(unique)  
# 输出:{1, 2, 3, 4}

注意!空集合不能写成 {},因为那是个字典。要写 set()

scss 复制代码
empty = set()
print(empty)  # 输出:set()

03 集合能装什么?

集合的元素必须是不可变的

  • 能放的:整数、浮点数、字符串、元组
  • 不能放的:列表、字典、另一个集合

比如:

ini 复制代码
ok_set = {1, 3.14, "hello", (1, 2)}
# ✅ 合法

但如果你写:

ini 复制代码
bad_set = {[1, 2], {"a": 1}}
# ❌ 报错

因为 list、dict 自身是可变的,会导致唯一性无法判断。


04 集合的常见操作

加元素

go 复制代码
fruits = {"apple", "banana"}
fruits.add("orange")
print(fruits)
# 输出:{'apple', 'banana', 'orange'}

删元素

ini 复制代码
numbers = {1, 2, 3, 4, 5}
numbers.remove(3)   # 如果元素不存在会报错
numbers.discard(10) # 不存在也不会报错
print(numbers)

随机删一个

ini 复制代码
n = {1, 2, 3}
x = n.pop()
print(x)   # 随机弹出一个

判断在不在集合里

bash 复制代码
vowels = {'a', 'e', 'i', 'o', 'u'}
print('a' in vowels)  # True
print('x' in vowels)  # False

05 数学味儿的操作

集合最帅气的地方在这儿:它天生支持数学里的集合运算。

并集(Union)

两个集合合并,自动去重:

css 复制代码
A = {1, 2, 3}
B = {3, 4, 5}
print(A | B)         # {1, 2, 3, 4, 5}
print(A.union(B))    # {1, 2, 3, 4, 5}

交集(Intersection)

找共同的:

css 复制代码
print(A & B)          # {3}
print(A.intersection(B))

差集(Difference)

找出一个集合有,另一个没有的:

bash 复制代码
print(A - B)          # {1, 2}
print(B - A)          # {4, 5}

对称差集(Symmetric Difference)

两个集合中不重叠的部分:

bash 复制代码
print(A ^ B)          # {1, 2, 4, 5}

是不是很直观?你完全可以把 Python 当做数学课的小助手。


06 生活中的用法

场景一:快速去重

比如说你有一个名单,结果里面名字重复了好多遍。

scss 复制代码
names = ["张三", "李四", "王五", "张三", "李四"]
unique_names = list(set(names))
print(unique_names)   # ['张三', '李四', '王五']

场景二:查找交集

比如你有两份名单:

  • 报名篮球社的
  • 报名足球社的

要知道谁"两边都报了",一行代码:

ini 复制代码
basketball = {"张三", "李四", "王五"}
football = {"王五", "赵六", "张三"}
print(basketball & football)  # {'张三', '王五'}

场景三:差集

比如要知道哪些人只报了篮球,没有报足球:

bash 复制代码
print(basketball - football)  # {'李四'}

这就是集合的威力。


07 哲理一角

到这儿,你可能觉得集合只是个去重的工具。 但仔细想想,其实 Python 的集合背后,藏着一点人生智慧:

  • 唯一性:真正重要的东西不会重复。朋友再多,知己只有一个。
  • 无序性:生命没有固定剧本,你遇见的顺序没那么重要,重要的是那些人最终留在了你的集合里。
  • 规则简单:只要记住"不可变"和"唯一"这两条,剩下的世界就井然有序。

写代码久了,你会发现:有些数据结构就是生活的隐喻。 list 代表琐碎,dict 代表关系网,而 set,代表极简、干净。


结语

今天这一篇,我们从"买水果"的小故事出发,把 Python 的 集合(set) 聊清楚了:

  • 它唯一、无序
  • 它有各种高效的操作(增删查改)
  • 它天生支持数学集合运算
  • 它在去重、查交集等场景下超实用

更重要的是,集合提醒我们: 别让生活里充满太多重复的垃圾元素,把"唯一的东西"留下来就好。


相关推荐
计算机编程小咖18 分钟前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
roamingcode1 小时前
Claude Code NPM 包发布命令
前端·npm·node.js·claude·自定义指令·claude code
码哥DFS1 小时前
NPM模块化总结
前端·javascript
灵感__idea1 小时前
JavaScript高级程序设计(第5版):代码整洁之道
前端·javascript·程序员
zhangfeng11331 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
唐璜Taro2 小时前
electron进程间通信-IPC通信注册机制
前端·javascript·electron
flashlight_hi2 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
python·算法·leetcode
Ashlee_code2 小时前
香港券商櫃台系統跨境金融研究
java·python·科技·金融·架构·系统架构·区块链
Jia-Hui Su3 小时前
GDSFactory环境配置(PyCharm+Git+KLayout)
git·python·pycharm
陪我一起学编程3 小时前
创建Vue项目的不同方式及项目规范化配置
前端·javascript·vue.js·git·elementui·axios·企业规范