插件窝 干货文章 Python 中 set 是什么?为何要是用它?

Python 中 set 是什么?为何要是用它?

set 元素 Python 可变 277    来源:    2025-05-11

Python 中的 set(集合)详解

什么是 set?

在 Python 中,set 是一种无序、可变且不包含重复元素的数据结构。它是 Python 的四种基本集合数据类型之一(其他三种是 list、tuple 和 dict)。

基本特点: - 无序:元素没有固定顺序 - 唯一性:不允许重复元素 - 可变:可以添加或删除元素 - 可哈希元素:set 中的元素必须是不可变类型(如数字、字符串、元组等)

创建 set

# 使用花括号
my_set = {1, 2, 3}

# 使用 set() 构造函数
my_set = set([1, 2, 3])  # 从列表创建
my_set = set((1, 2, 3))  # 从元组创建

为什么要使用 set?

1. 快速成员检测

set 使用哈希表实现,查找元素的时间复杂度是 O(1),比列表的 O(n) 快得多。

my_set = {1, 2, 3, 4, 5}
print(3 in my_set)  # 快速判断,比列表快

2. 自动去重

自动去除重复元素是 set 的主要特性之一。

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)  # {1, 2, 3, 4, 5}

3. 高效的集合运算

set 支持多种数学集合操作,如并集、交集、差集等。

a = {1, 2, 3}
b = {3, 4, 5}

# 并集
print(a | b)  # {1, 2, 3, 4, 5}

# 交集
print(a & b)  # {3}

# 差集
print(a - b)  # {1, 2}

# 对称差集(仅在其中一个集合中的元素)
print(a ^ b)  # {1, 2, 4, 5}

4. 某些算法优化

许多算法问题可以通过 set 来优化,如: - 查找两个列表的共同元素 - 检测是否有重复元素 - 图算法中的节点存储等

使用场景示例

  1. 去重

    words = ["hello", "world", "hello", "python"]
    unique_words = set(words)
    
  2. 快速查找

    valid_users = {"alice", "bob", "charlie"}
    if username in valid_users:
       print("Access granted")
    
  3. 比较数据

    # 找出两个列表的不同元素
    list1 = [1, 2, 3, 4]
    list2 = [3, 4, 5, 6]
    diff = set(list1) ^ set(list2)  # {1, 2, 5, 6}
    

注意事项

  • set 是无序的,不能通过索引访问元素
  • set 不能包含可变元素(如列表、字典或其他 set)
  • frozenset 是不可变版本的 set

set 是 Python 中非常实用的数据结构,在需要快速查找、去重或集合运算时,它是理想的选择。