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

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

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


相关推荐
yaoganjili13 小时前
用 Tinymce 打造智能写作
前端
angelQ13 小时前
Vue 3 中 ref 获取 scrollHeight 属性为 undefined 问题定位
前端·javascript
Dontla13 小时前
(临时解决)Chrome调试避免跳入第三方源码(设置Blackbox Scripts、将目录添加到忽略列表、向忽略列表添加脚本)
前端·chrome
言之。13 小时前
Andrej Karpathy 演讲【PyTorch at Tesla】
人工智能·pytorch·python
我的div丢了肿么办13 小时前
js函数声明和函数表达式的理解
前端·javascript·vue.js
云中雾丽13 小时前
React.forwardRef 实战代码示例
前端
朝歌青年说13 小时前
一个在多年的技术债项目中写出来的miniHMR热更新工具
前端
赵谨言13 小时前
基于Python楼王争霸劳动竞赛数据处理分析
大数据·开发语言·经验分享·python
Moonbit13 小时前
倒计时 2 天|Meetup 议题已公开,Copilot 月卡等你来拿!
前端·后端
Glink13 小时前
现在开始将Github作为数据库
前端·算法·github