Python 3 集合(Set)详解
                           
天天向上
发布: 2025-03-14 22:23:29

原创
190 人浏览过

1. 集合(Set)概述

Python 集合(Set)是一种无序、可变、元素唯一的数据结构,类似于数学中的集合。集合适用于去重、关系运算(交集、并集、差集等)。

集合特点

  • 无序:集合中的元素没有固定的顺序。
  • 唯一性:集合中的元素不允许重复。
  • 可变性:集合可以进行增删操作。

📌 示例:创建一个集合

# 定义集合
numbers = {1, 2, 3, 4, 5}
print(numbers)  # {1, 2, 3, 4, 5}

# 集合自动去重
nums = {1, 2, 2, 3, 4, 4}
print(nums)  # {1, 2, 3, 4}

2. 创建集合

(1)使用 {} 直接创建

my_set = {1, 2, 3, 4, 5}
print(my_set)  # {1, 2, 3, 4, 5}

(2)使用 set() 函数

可以将列表、元组、字符串等转换为集合。

my_list = [1, 2, 3, 3, 4]
my_set = set(my_list)
print(my_set)  # {1, 2, 3, 4}

(3)创建空集合

注意:空集合不能用 {},会变成字典,必须用 set()

empty_set = set()
print(type(empty_set))  # <class 'set'>

3. 访问集合元素

集合不能通过索引访问元素,因为它是无序的,但可以使用 for 循环遍历:

my_set = {1, 2, 3, 4}
for item in my_set:
    print(item)

4. 添加和删除元素

(1)添加元素

  • add():向集合添加单个元素。
  • update():向集合添加多个元素(列表、元组、字符串)。
my_set = {1, 2, 3}
my_set.add(4)  # 添加单个元素
print(my_set)  # {1, 2, 3, 4}

my_set.update([5, 6, 7])  # 添加多个元素
print(my_set)  # {1, 2, 3, 4, 5, 6, 7}

(2)删除元素

  • remove(value):删除指定元素,如果不存在则报错。
  • discard(value):删除指定元素,不存在不会报错。
  • pop():随机删除一个元素(因为集合无序)。
  • clear():清空集合。
my_set = {1, 2, 3, 4, 5}

my_set.remove(3)  # 删除 3
print(my_set)  # {1, 2, 4, 5}

my_set.discard(6)  # 删除 6,不报错
print(my_set)  # {1, 2, 4, 5}

element = my_set.pop()  # 随机删除一个元素
print(f"删除了 {element}, 剩余集合 {my_set}")

my_set.clear()  # 清空集合
print(my_set)  # set()

5. 集合运算

Python 集合支持并集、交集、差集、对称差集等操作

(1)并集(|union()

包含所有元素,去重。

set1 = {1, 2, 3}
set2 = {3, 4, 5}

print(set1 | set2)  # {1, 2, 3, 4, 5}
print(set1.union(set2))  # {1, 2, 3, 4, 5}

(2)交集(&intersection()

只保留共同的元素。

print(set1 & set2)  # {3}
print(set1.intersection(set2))  # {3}

(3)差集(-difference()

返回set1 中但不在 set2的元素。

print(set1 - set2)  # {1, 2}
print(set1.difference(set2))  # {1, 2}

(4)对称差集(^symmetric_difference()

返回不同时出现在两个集合中的元素(去掉公共部分)。

print(set1 ^ set2)  # {1, 2, 4, 5}
print(set1.symmetric_difference(set2))  # {1, 2, 4, 5}

6. 集合比较

集合支持子集、超集、相等性比较

方法说明示例
issubset()是否是子集set1.issubset(set2)
issuperset()是否是超集set1.issuperset(set2)
isdisjoint()是否无交集set1.isdisjoint(set2)
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}

print(a.issubset(b))  # True,a 是 b 的子集
print(b.issuperset(a))  # True,b 是 a 的超集
print(a.isdisjoint({4, 5}))  # True,a 和 {4,5} 没有交集

7. 集合推导式

集合推导式(Set Comprehension)可以快速生成集合

📌 示例:创建平方数集合

squares = {x**2 for x in range(1, 6)}
print(squares)  # {1, 4, 9, 16, 25}

📌 示例:过滤重复元素

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = {x for x in numbers}
print(unique_numbers)  # {1, 2, 3, 4, 5}

8. 冻结集合(frozenset)

frozenset不可变的集合,一旦创建就不能修改(适用于字典的键等)。

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

# fset.add(5)  # ❌ 会报错,frozenset 不能修改

9. 总结

集合是无序、唯一的容器
支持并集、交集、差集、对称差集等操作
支持 add() 添加,remove()discard() 删除
frozenset 是不可变集合
适用于去重、集合运算、快速查找 🚀

集合在 Python 中非常实用,特别是数据去重和数学运算!更多详细内容请关注其他相关!

发表回复 0

Your email address will not be published. Required fields are marked *