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) 聊清楚了:

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

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


相关推荐
serve the people几秒前
tensorflow 深度解析 Sequential 模型的输入形状指定
人工智能·python·tensorflow
SunnyDays10111 分钟前
Python 实现 PDF 文档压缩:完整指南
linux·开发语言·python
长安牧笛1 分钟前
设计考研党备考开支追踪程序,记录教材,网课,报名费支出,按科目统计花费,优化备考预算分配。
python
HIT_Weston2 分钟前
66、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(十)
前端·ubuntu·gitlab
长空任鸟飞_阿康5 分钟前
LangChain 技术栈全解析:从模型编排到 RAG 实战
前端·python·langchain
江上鹤.1486 分钟前
Day42Dataset和Dataloader
python
chilavert3187 分钟前
技术演进中的开发沉思-258 Ajax:自定义事件
前端·ajax·okhttp
天勤量化大唯粉10 分钟前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
南知意-12 分钟前
从零搭建 Live2D 看板娘教程(自建API避墙版)
服务器·前端·vue.js·开源·博客·美化·看板娘
Bruce_Liuxiaowei16 分钟前
Python 跨平台 Nmap 自动化扫描工具:从手动到一键批量扫描
开发语言·python·网络安全·自动化