Python 集合:运算、方法和集合论

Python 中的大师集。学习存储唯一值、执行交集、并集、差异,并了解散列的性能优势。

在编辑器中尝试

概述

Set 是 Python 中唯一元素的无序集合。集合建立在哈希表上,这使得它们针对成员资格测试进行了高度优化 - 确定特定元素是否在集合内。检查某个项目是否在列表中需要扫描每个项目(“O(N)”操作),而检查集合中的成员资格则需要“O(1)”常量时间。这使得集合对于重复消除和批量数据过滤非常强大。

集合使用包含值(不带冒号)的花括号“{}”或使用内置的“set()”构造函数进行初始化。请注意,由于大括号也用于字典,因此编写空大括号“{}”会初始化一个空字典。要初始化一个空集,您必须使用“set()”。集合内的元素必须是可散列且不可变的,这意味着您可以存储数字、字符串和元组,但不能在集合内存储列表或字典。

除了基本的添加和删除方法之外,Python 集合本身还支持数学集合论中的运算。这包括用于合并集合的并集(`|` 或 `.union()`)、用于查找公共元素的交集(`&` 或 `.intersection()`)、用于查找一个集合唯一的元素的差值(`-` 或 `.difference()`)以及用于检索任一集合中但不是两个集合中的项目的对称差值 (`^`)。掌握集合可以让您使用干净、高性能且可读的代码解决复杂的分组问题。

代码和执行输出

从列表中删除重复项并执行数学集合运算。

# Removing duplicates
roles_list = ["admin", "user", "editor", "admin", "user"]
# Sort the set to guarantee deterministic printed output
unique_roles = sorted(list(set(roles_list)))
print(f"Unique roles: {unique_roles}")

# Set operations
dev_skills = {"python", "javascript", "sql"}
ops_skills = {"sql", "docker", "kubernetes"}

# Union and Intersection (sorted for deterministic output)
all_skills = sorted(list(dev_skills | ops_skills))
common_skills = sorted(list(dev_skills & ops_skills))
unique_to_dev = sorted(list(dev_skills - ops_skills))

print(f"Union: {all_skills}")
print(f"Intersection: {common_skills}")
print(f"Dev only: {unique_to_dev}")
端子输出
Unique roles: ['admin', 'editor', 'user']
Union: ['docker', 'javascript', 'kubernetes', 'python', 'sql']
Intersection: ['sql']
Dev only: ['javascript', 'python']

逐步实施

  • 从 API 结果或 CSV 文件中删除重复条目
  • 确定两个数据库之间的共同元素
  • 对大型 ID 列表执行快速查找操作

常见问题解答

集合中的元素是有序的吗?

不,集合是无序的。您无法通过索引(如 set[0])访问元素或对它们进行切片。

如何添加或删除集合中的元素?

使用 .add() 方法插入单个元素,使用 .remove() 或 .discard() 方法删除一个元素。 .discard() 更安全,因为如果元素丢失它不会抛出错误。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。