Python 集合(Set)详细讲解

一、集合的定义与特性

集合(Set) 是 Python 中用于存储 无序、唯一元素 的容器。核心特性

  1. 元素唯一性:集合中不允许重复元素,自动去重。

  2. 无序性:元素存储顺序与添加顺序无关,无法通过索引访问。

  3. 可变性:集合本身可动态修改(但元素必须是 不可变类型)。

  4. 高效操作:基于哈希表实现,查找、添加、删除的时间复杂度为 O(1)。


二、集合的创建
方法1:直接定义
# 空集合(注意:不能用 {},这会创建字典)
empty_set = set()

# 带初始元素的集合
fruits = {"apple", "banana", "orange"}  # 自动去重
方法2:从其他序列转换
numbers = set([1, 2, 2, 3])       # {1, 2, 3}
chars = set("hello")              # {'h', 'e', 'l', 'o'}
方法3:集合推导式(Set Comprehension)
squares = {x**2 for x in range(5)}  # {0, 1, 4, 9, 16}

三、集合的常见操作

操作

描述

示例

添加元素

add()

添加单个元素

s.add(4)
update()

合并其他集合/序列

s.update([4,5], {6})
删除元素

remove()

移除指定元素(不存在则报错)

s.remove(3)
discard()

安全移除元素(不存在不报错)

s.discard(3)
pop()

随机弹出元素(集合为空报错)

s.pop()
clear()

清空集合

s.clear()
成员检测

in

 操作符

判断元素是否存在

if 2 in s: ...
大小信息

len()

获取元素数量

len(s)

四、集合的数学运算

Python 集合支持标准的数学集合运算:

1. 并集(Union)
A = {1, 2}
B = {2, 3}
print(A | B)           # {1, 2, 3}
print(A.union(B))      # 同上
2. 交集(Intersection)
print(A & B)           # {2}
print(A.intersection(B))
3. 差集(Difference)
print(A - B)           # {1}
print(A.difference(B))
4. 对称差集(Symmetric Difference)
print(A ^ B)           # {1, 3}
print(A.symmetric_difference(B))
5. 子集/超集判断
C = {1, 2}
print(C <= A)          # True(C 是 A 的子集)
print(A.issuperset(C)) # True(A 是 C 的超集)

五、不可变集合(frozenset)

用于创建不可修改的集合:

fs = frozenset([1, 2, 3])
# fs.add(4)  # 报错:AttributeError

六、实际应用场景
1. 数据去重
names = ["Alice", "Bob", "Alice", "Charlie"]
unique_names = set(names)  # {'Alice', 'Bob', 'Charlie'}
2. 关系测试
# 找出两个列表的共同元素
list1 = [1, 2, 3]
list2 = [2, 3, 4]
common = set(list1) & set(list2)  # {2, 3}
3. 过滤重复数据
# 从日志中提取唯一 IP 地址
logs = ["192.168.1.1", "10.0.0.1", "192.168.1.1"]
unique_ips = {log.split()[0] for log in logs}
4. 集合运算优化
# 统计两篇文章的共有词汇和独有词汇
article1_words = {"data", "science", "python"}
article2_words = {"machine", "learning", "python"}
common_words = article1_words & article2_words  # {"python"}
unique_to_article1 = article1_words - article2_words  # {"data", "science"}

七、性能特点与注意事项
  1. 查找速度极快:检查元素是否存在时,集合比列表快得多:

    # 列表:O(n) 时间
    if 1000000 in my_list: ... 
    
    # 集合:O(1) 时间
    if 1000000 in my_set: ...
    
  2. 内存占用较高:集合需要存储哈希表结构,内存消耗通常大于列表。

  3. 元素必须可哈希:集合中的元素必须是不可变类型(如数字、字符串、元组),不能包含列表或字典:

    valid_set = {1, "a", (2, 3)}       # 合法
    invalid_set = {[1, 2]}             # 报错:TypeError
    
  4. 无序性导致的问题

    # 不要依赖遍历顺序
    for item in my_set:
        print(item)  # 顺序可能每次不同
    

八、集合与其他数据结构的对比

特性

列表(List)

字典(Dict)

集合(Set)

元素唯一性

允许重复

键唯一

元素唯一

访问方式

索引

无法直接索引

内存占用

较低

较高

较高

典型用途

有序数据集合

键值对映射

去重/集合运算


最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!

🌟 学习大礼包包含内容:

Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。

超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。

实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。

华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。

互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。

👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值