Python3 集合

Python3 集合知识点详解

Python3 集合(Set)知识点详解

编程小白的Python集合完全指南 – 通俗易懂的大白话解释

集合(set)是Python中的一种基本数据类型,用于存储多个不重复的元素。集合中的元素是无序的,且不能通过索引访问,但可以进行高效的成员检测、去重等操作。

集合基础

什么是集合?

集合就像是一个没有重复元素的”袋子”,里面的元素没有顺序,不能通过位置访问,但可以快速判断某个元素在不在袋子里。

大白话解释:集合就像是一个班级的学生名单,每个学生只出现一次(不重复),而且名单没有顺序要求。

创建集合

创建集合有两种方式:使用花括号{}或set()函数

# 创建包含元素的集合 fruits = {“apple”, “banana”, “cherry”} print(fruits) # 输出:{‘cherry’, ‘banana’, ‘apple’} # 使用set()创建空集合 empty_set = set() print(empty_set) # 输出:set()

⚠️ 注意:不能使用{}创建空集合,这样会创建一个空字典!

集合的特点

  • 元素不重复(自动去重)
  • 元素无序(每次打印顺序可能不同)
  • 元素必须是不可变类型(数字、字符串、元组)
  • 不能包含列表、字典等可变类型
集合操作

添加元素

使用add()添加单个元素,使用update()添加多个元素

colors = {“red”, “green”, “blue”} # 添加单个元素 colors.add(“yellow”) print(colors) # 输出:{‘red’, ‘green’, ‘blue’, ‘yellow’} # 添加多个元素 colors.update([“orange”, “purple”, “red”]) # 注意:重复元素不会添加 print(colors) # 输出:{‘red’, ‘green’, ‘blue’, ‘yellow’, ‘orange’, ‘purple’}

删除元素

使用remove()、discard()删除元素,使用pop()随机删除一个元素

numbers = {1, 2, 3, 4, 5} # remove() – 删除指定元素,元素不存在会报错 numbers.remove(3) print(numbers) # 输出:{1, 2, 4, 5} # discard() – 删除指定元素,元素不存在也不会报错 numbers.discard(10) # 不会报错 # pop() – 随机删除一个元素并返回它 removed = numbers.pop() print(f”删除了 {removed}, 剩余: {numbers}”) # 清空集合 numbers.clear() print(numbers) # 输出:set()

集合大小和成员检测

使用len()获取元素个数,使用in检查元素是否存在

animals = {“cat”, “dog”, “bird”} print(len(animals)) # 输出:3 print(“cat” in animals) # 输出:True print(“fish” in animals) # 输出:False
集合运算

集合间的关系运算

示例集合

A = {1, 2, 3, 4}

B = {3, 4, 5, 6}

运算 操作符 方法 结果
并集 | union() A | B = {1, 2, 3, 4, 5, 6}
交集 & intersection() A & B = {3, 4}
差集 difference() A – B = {1, 2}
对称差集 ^ symmetric_difference() A ^ B = {1, 2, 5, 6}

大白话解释:

  • 并集:所有元素的大合集(去重)
  • 交集:两个集合都有的元素
  • 差集:在A中但不在B中的元素
  • 对称差集:只在其中一个集合中的元素

集合关系判断

X = {1, 2, 3} Y = {1, 2} Z = {1, 2, 4} # 子集判断 print(Y.issubset(X)) # True – Y是X的子集 print(Y <= X) # True # 真子集 print(Y < X) # True # 超集判断 print(X.issuperset(Y)) # True - X是Y的超集 # 无交集判断 print(X.isdisjoint(Z)) # False - X和Z有交集
集合应用场景

1. 快速去重

集合最常用的功能就是去除列表中的重复元素

# 列表去重 numbers = [1, 2, 2, 3, 4, 4, 5] unique_numbers = list(set(numbers)) print(unique_numbers) # 输出:[1, 2, 3, 4, 5]

2. 成员关系测试

集合的查找速度比列表快得多,特别适合大量数据的成员检查

# 大型数据集中查找 big_set = set(range(1000000)) # 检查元素是否存在(速度非常快) print(999999 in big_set) # 输出:True

3. 数学运算

集合运算非常适合处理关系型数据

# 找出两个列表的共同元素 list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] common = set(list1) & set(list2) print(common) # 输出:{4, 5}

4. 过滤数据

找出只出现一次的元素

# 找出两个列表中不同的元素 diff = set(list1) ^ set(list2) print(diff) # 输出:{1, 2, 3, 6, 7, 8}

5. 数据分组

# 根据条件分组 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] even = {x for x in numbers if x % 2 == 0} odd = {x for x in numbers if x % 2 != 0} print(“偶数:”, even) # 输出:偶数: {8, 2, 4, 6} print(“奇数:”, odd) # 输出:奇数: {1, 3, 5, 7, 9}
集合方法总结

常用集合方法

方法 描述 示例
add() 添加元素 s.add(‘a’)
update() 添加多个元素 s.update([1,2,3])
remove() 删除元素,不存在则报错 s.remove(‘a’)
discard() 删除元素,不存在不报错 s.discard(‘a’)
pop() 随机删除并返回一个元素 s.pop()
clear() 清空集合 s.clear()
copy() 复制集合 s.copy()
union() 返回并集 s.union(t)
intersection() 返回交集 s.intersection(t)
difference() 返回差集 s.difference(t)
symmetric_difference() 返回对称差集 s.symmetric_difference(t)
issubset() 判断子集 s.issubset(t)
issuperset() 判断超集 s.issuperset(t)
isdisjoint() 判断无交集 s.isdisjoint(t)

💡 提示:集合是可变的,但可以使用frozenset()创建不可变集合

集合特性与注意事项

集合与列表/元组的区别

特性 列表(list) 元组(tuple) 集合(set)
可变性 可变 不可变 可变
顺序 有序 有序 无序
重复元素 允许 允许 不允许
查找速度 非常快
语法 [1, 2, 3] (1, 2, 3) {1, 2, 3}

使用集合的注意事项

  • 集合只能包含不可变类型(可哈希对象)
  • 不能把列表、字典等可变类型放入集合中
  • 集合本身是可变类型,不能作为字典的键
  • 使用frozenset()可以创建不可变集合,可用作字典键
  • 集合遍历顺序不固定,不要依赖元素的顺序
不可变集合示例
# 创建不可变集合 frozen = frozenset([1, 2, 3, 4]) # 可以用作字典的键 d = {frozen: “这是一个不可变集合”} print(d[frozen]) # 输出:这是一个不可变集合

集合推导式

与列表推导式类似,但生成的是集合

# 生成1-10的平方的集合 squares = {x**2 for x in range(1, 11)} print(squares) # 输出:{64, 1, 4, 36, 100, 9, 16, 49, 81, 25} # 只保留偶数的平方 even_squares = {x**2 for x in range(1, 11) if x % 2 == 0} print(even_squares) # 输出:{16, 4, 100, 64, 36}

Python3 集合知识点汇总 | 通俗易懂的大白话解释 | 编程小白也能轻松理解

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部