Python set 函数
上次修改时间:2025 年 4 月 11 日
本综合指南探讨了 Python 的 set
函数,该函数创建一个包含唯一元素的无序集合。我们将介绍集合的创建、操作和实际示例。
基本定义
set
函数创建一个包含唯一且可哈希元素的 mutable set 对象。集合是无序的集合,不允许重复元素。
主要特点:元素必须是可哈希的,集合是可变的,但元素必须是不可变的,支持数学集合运算,如并集和交集。
创建基本集合
以下是简单的用法,展示了如何使用 set
构造函数从不同的可迭代类型创建集合。
# From a list numbers = set([1, 2, 3, 2, 1]) print(numbers) # {1, 2, 3} # From a string chars = set("hello") print(chars) # {'h', 'e', 'l', 'o'} # From a tuple items = set(('apple', 'banana', 'apple')) print(items) # {'apple', 'banana'} # Empty set empty = set() print(empty) # set()
此示例展示了从不同可迭代对象创建集合。重复项会自动删除。 请注意,空集合的语法与字典不同。
字符串示例显示集合如何将序列分解为单个元素。 请注意输出中由于唯一性而只有一个“l”。
集合操作
集合支持强大的数学运算。 此示例演示了常见的集合运算,如并集、交集和差集。
a = set([1, 2, 3, 4]) b = set([3, 4, 5, 6]) # Union print(a | b) # {1, 2, 3, 4, 5, 6} print(a.union(b)) # same as above # Intersection print(a & b) # {3, 4} print(a.intersection(b)) # Difference print(a - b) # {1, 2} print(a.difference(b)) # Symmetric difference print(a ^ b) # {1, 2, 5, 6} print(a.symmetric_difference(b))
这演示了四个基本集合运算。 每个操作都有运算符和方法版本。 对称差显示存在于任一集合中但不同时存在于两个集合中的元素。
这些操作经过高度优化,比使用列表的手动实现快得多。
集合推导式
与列表推导式类似,Python 支持集合推导式,以便简洁地创建集合。 此示例显示了各种集合推导式。
# Basic comprehension squares = {x**2 for x in range(10)} print(squares) # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81} # With condition odds = {x for x in range(20) if x % 2 != 0} print(odds) # {1, 3, 5, 7, 9, 11, 13, 15, 17, 19} # From another iterable words = ["hello", "world", "python"] lengths = {len(word) for word in words} print(lengths) # {5, 6}
集合推导式遵循与列表推导式相同的语法,但使用大括号。 它们会自动处理唯一性,就像常规集合一样。
第二个示例过滤奇数。 第三个示例显示了转换,演示了集合自动删除长度重复项。
成员资格测试
由于哈希表实现,集合提供非常快的成员资格测试。 此示例比较了集合和列表的性能。
import timeit # Large collections big_set = set(range(1000000)) big_list = list(range(1000000)) # Membership test functions def test_set(): return 999999 in big_set def test_list(): return 999999 in big_list # Timing print("Set membership:", timeit.timeit(test_set, number=10000)) print("List membership:", timeit.timeit(test_list, number=10000))
此基准测试显示了成员资格测试的显着性能差异。 集合使用 O(1) 查找,而列表使用 O(n) 线性搜索。
对于大型集合,集合在成员资格测试方面可能比列表快数千倍。
冻结集合
Python 通过 frozenset
提供不可变集合。 此示例显示了它们的创建和用作字典键。
# Create frozenset fs = frozenset([1, 2, 3, 4]) print(fs) # frozenset({1, 2, 3, 4}) # Use as dictionary key d = { frozenset([1, 2]): "set with 1 and 2", frozenset([3, 4]): "set with 3 and 4" } print(d[frozenset([1, 2])]) # "set with 1 and 2"
冻结集合是可哈希且不可变的,使其适合作为字典键。 常规集合不能以这种方式使用,因为它们是可变的。
除了修改集合的操作之外,所有集合操作都适用于冻结集合。 当您需要在可哈希形式中使用集合属性时,它们很有用。
最佳实践
- 用于唯一性: 转换为集合以删除重复项
- 利用快速查找: 使用集合进行成员资格测试
- 选择正确的语法: 对空集合使用 set(),{} 创建 dict
- 考虑冻结集合: 当需要不变性时
- 记录假设: 记下顺序无关紧要的情况
资料来源
作者
列出所有 Python 教程。