当前位置: 首页 > news >正文

Python 中的集合(set)知识大全

Python 中的集合(set)知识大全

🧱 一、什么是集合(set)

集合(set) 是一个 无序、元素唯一、可变 的数据结构。
可以理解为“没有重复元素的列表”。

📘 示例:

fruits = {"apple", "banana", "orange"}

✅ 特点:

无序(没有索引,不能像列表那样用 [0] 访问)

元素唯一(自动去重)

可变(可以增删元素)

支持数学集合运算(交、并、差、对称差)

⚙️ 二、集合的创建方式

# 方法1:用花括号 {}
s1 = {1, 2, 3}# 方法2:用 set() 构造函数
s2 = set([1, 2, 2, 3])   # 自动去重 -> {1, 2, 3}# 方法3:创建空集合
s3 = set()                # ✅ 正确
# s4 = {}                 # ❌ 这是一个空字典,不是集合!

🔍 三、基本操作

s = {1, 2, 3}# 添加元素
s.add(4)              # {1, 2, 3, 4}# 一次添加多个
s.update([5, 6])      # {1, 2, 3, 4, 5, 6}# 删除元素
s.remove(2)           # 删除存在的元素(不存在时报错)
s.discard(10)         # 删除不存在的元素时不会报错
s.pop()               # 随机删除一个元素
s.clear()             # 清空集合

🧠 四、集合运算(超重要🔥)

Python 的集合类型支持各种 数学集合操作:

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}# 并集 union
print(a | b)           # {1, 2, 3, 4, 5, 6}
print(a.union(b))      # 同上# 交集 intersection
print(a & b)           # {3, 4}
print(a.intersection(b))# 差集 difference
print(a - b)           # {1, 2}  (在 a 中但不在 b 中)
print(b - a)           # {5, 6}# 对称差集 symmetric_difference
print(a ^ b)           # {1, 2, 5, 6} (属于 a 或 b,但不同时属于)

🔎 五、集合的关系运算

集合也可以用来判断包含、相等等关系:

a = {1, 2, 3}
b = {1, 2}
c = {1, 2, 3}b.issubset(a)     # True,b 是 a 的子集
a.issuperset(b)   # True,a 是 b 的超集
a.isdisjoint(b)   # False,有交集
a == c            # True,集合相等只看元素,不看顺序

🧩 六、集合推导式(Set Comprehension)

像列表推导式一样,可以快速生成集合:

squares = {x ** 2 for x in range(5)}
# {0, 1, 4, 9, 16}# 去重的常用技巧
nums = [1, 2, 2, 3, 3, 3]
unique = {x for x in nums}   # {1, 2, 3}

⚡ 七、集合常用方法汇总

方法作用
add(x)添加元素
update(iterable)添加多个元素
remove(x)删除元素(不存在时报错)
discard(x)删除元素(不存在不报错)
pop()随机删除一个元素
clear()清空集合
copy()浅拷贝
union()并集
intersection()交集
difference()差集
symmetric_difference()对称差集
issubset()是否是子集
issuperset()是否是超集
isdisjoint()是否没有交集

🧮 八、集合的典型应用场景

1️⃣ 去重(最常见)

nums = [1, 2, 2, 3, 3, 3]
unique_nums = list(set(nums))   # [1, 2, 3]

2️⃣ 判断元素是否存在(比列表更快)

names = {"Alice", "Bob", "Charlie"}
print("Alice" in names)   # True

⚡ 集合的查找是 O(1) 时间复杂度,比列表的 O(n) 快很多!

3️⃣ 集合运算过滤数据

students = {"Tom", "Lucy", "Jack"}
passed = {"Lucy", "Jack"}failed = students - passed   # {'Tom'}

4️⃣ 去重并排序

data = [4, 2, 2, 5, 1, 1, 3]
unique_sorted = sorted(set(data))
# [1, 2, 3, 4, 5]

🧩 九、不可变集合(frozenset)

有时我们希望集合本身不能被修改,就可以用 frozenset:

a = frozenset([1, 2, 3])
b = frozenset([3, 4])print(a | b)    # 并集:frozenset({1, 2, 3, 4})
# a.add(5) ❌ 会报错:frozenset 不可变

用途:作为字典键、放入另一个集合中(因为普通 set 不能嵌套)。

🧠 十、集合 vs 列表 vs 字典 对比

特性setlistdict
是否有序✅(3.7+)
是否可重复❌(键唯一)
是否可变
访问方式按值(无索引)按索引按键
查找速度⚡ O(1)🐢 O(n)⚡ O(1)

🧩 十一、实战小例子

✅ 1. 查找两个列表中共有的元素

a = [1, 2, 3, 4]
b = [3, 4, 5, 6]common = set(a) & set(b)
print(common)  # {3, 4}

✅ 2. 统计字符串中不重复的字母

s = "hello world"
unique_chars = set(s)
print(unique_chars)
# {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}

✅ 3. 判断是否有交集

a = {"apple", "banana"}
b = {"cherry", "banana"}
print(not a.isdisjoint(b))  # True,有交集

🎯 小结

知识点关键要点
集合特点无序、唯一、可变
主要用途去重、快速查找、集合运算
常用运算并集 、交集 &、差集 -、对称差集
推导式{expr for item in iterable}
不可变集合frozenset

🧩 一、Python 集合实战练习题(含讲解)

🧠 练习 1:去除重复元素

📘 题目:
有一个列表 nums = [1, 2, 2, 3, 3, 3, 4],请用集合去重并输出结果。

💡 提示:
集合的特点之一就是“元素唯一”。

✅ 答案:

nums = [1, 2, 2, 3, 3, 3, 4]
unique = set(nums)
print(unique)
# {1, 2, 3, 4}

💬 用 set() 去重是最简单、最高效的方法。
如果要保持顺序,可以这样:

unique_ordered = list(dict.fromkeys(nums))

🧠 练习 2:找出两个列表的共有元素(交集)

📘 题目:

a = [1, 2, 3, 4, 5]
b = [4, 5, 6, 7, 8]

请找出两个列表中都出现的数字。

✅ 答案:

common = set(a) & set(b)
print(common)
# {4, 5}

⚡ 集合的交集操作 & 非常高效,比用循环或 if 快得多。

🧠 练习 3:找出只在其中一个列表中的元素(对称差集)

📘 题目:

a = [1, 2, 3]
b = [3, 4, 5]

输出只出现在一个列表中的元素。

✅ 答案:

unique = set(a) ^ set(b)
print(unique)
# {1, 2, 4, 5}

💡 对称差集 ^ 表示“在 a 或 b 中,但不同时在两者中”。

🧠 练习 4:判断子集关系

📘 题目:

A = {"apple", "banana", "cherry"}
B = {"apple", "banana"}

请判断 B 是否是 A 的子集。

✅ 答案:

print(B.issubset(A))   # True
print(A.issuperset(B)) # True

💬 .issubset() 与 .issuperset() 是判断集合包含关系的好帮手。

🧠 练习 5:快速判断某个元素是否存在

names = {"Tom", "Lucy", "Jack"}

判断 “Lucy” 是否在集合中。

✅ 答案:

print("Lucy" in names)  # True

🧠 练习 6:集合推导式

📘 题目:
生成一个包含 1~10 之间偶数平方的集合。

✅ 答案:

squares = {x**2 for x in range(1, 11) if x % 2 == 0}
print(squares)
# {4, 16, 36, 64, 100}

🧠 练习 7:统计字符串中不重复的字符数量

📘 题目:

s = "banana"

计算字符串中不重复的字符数量。

✅ 答案:

unique_chars = set(s)
print(len(unique_chars))  # 3
print(unique_chars)       # {'b', 'a', 'n'}

🧠 练习 8:从两个集合中删除重复值

📘 题目:

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

要求:

删除两个集合共有的元素

输出更新后的两个集合

✅ 答案:

common = A & B
A -= common
B -= common
print(A, B)
# {1, 2} {5, 6}

🧠 练习 9:创建不可变集合

📘 题目:
创建一个不能被修改的集合 {1, 2, 3}。

✅ 答案:

frozen = frozenset([1, 2, 3])
print(frozen)
# frozenset({1, 2, 3})

❌ frozen.add(4) 会报错,因为 frozenset 是不可变类型。

🧠 练习 10:求列表中唯一出现过一次的元素

📘 题目:

nums = [1, 2, 2, 3, 4, 4, 5]

找出只出现过一次的数字。

✅ 答案:

nums_set = set(nums)
duplicates = {x for x in nums if nums.count(x) > 1}
unique_once = nums_set - duplicates
print(unique_once)
# {1, 3, 5}

💡 集合运算让这种过滤逻辑非常简洁!

http://www.dtcms.com/a/462588.html

相关文章:

  • 网站开发工具的功能包括现在的公司都有自己的网站吗
  • 浏览器访问百度首页的七层协议协作流程
  • 陕西中小企业网站建设推广促销直播网站开发
  • 算起计算器APP发布
  • 做类似淘宝的网站设计需要什么视频素材模板免费下载网
  • 商业网站源码安卓app是用什么语言开发的
  • ros2 自定义消息、服务、动作接口详细范例
  • 企业网站托管后果html5和h5的区别
  • 做网站营业执照经营范围怎么填写如何修改asp网站栏目
  • css里的where选择器的用法
  • 网站人多怎么优化全网引擎搜索
  • 10-七麦js扣代码
  • 做一婚恋网站多少钱医疗网络营销方式
  • golang面经——sync相关
  • wordpress 财经插件wordpress mysql优化
  • 软考中级习题与解答——第十四章_UML建模(5)
  • 万网怎样做网站调试字体怎么装到wordpress
  • 【Open3D】Ch.2:点云体素下采样 | Python
  • 奉贤区做网站wordpress五分钟安装
  • 复杂网络仿真从入门到精通:0 学习路线
  • 怎样创建网站数据库服装租赁 网站 php
  • 礼品工艺品网站建设首页网站模板
  • 福州推广企业网站网站优化助手
  • Playwright MCP 使用归档:让 AI IDE 看懂 API 文档与流程图
  • 网站优化 情况公司注册地址在哪里查询
  • (二)Kafka学习笔记(p13-p23)
  • .net 微信网站开发wordpress 安装 此网页包含重定向循环
  • 【开题答辩过程】以《基于SpringBoot的消防安全应急培训管理平台》为例,不会开题答辩的可以进来看看
  • iis 创建网站o2o有哪些电商平台
  • 南京市环保局官方南京做网站wordpress制作404页面模板