在 Python 中,set 是一种无序、可变且不包含重复元素的数据结构。它是 Python 的四种基本集合数据类型之一(其他三种是 list、tuple 和 dict)。
基本特点: - 无序:元素没有固定顺序 - 唯一性:不允许重复元素 - 可变:可以添加或删除元素 - 可哈希元素:set 中的元素必须是不可变类型(如数字、字符串、元组等)
# 使用花括号
my_set = {1, 2, 3}
# 使用 set() 构造函数
my_set = set([1, 2, 3]) # 从列表创建
my_set = set((1, 2, 3)) # 从元组创建
set 使用哈希表实现,查找元素的时间复杂度是 O(1),比列表的 O(n) 快得多。
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # 快速判断,比列表快
自动去除重复元素是 set 的主要特性之一。
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers) # {1, 2, 3, 4, 5}
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}
许多算法问题可以通过 set 来优化,如: - 查找两个列表的共同元素 - 检测是否有重复元素 - 图算法中的节点存储等
去重:
words = ["hello", "world", "hello", "python"]
unique_words = set(words)
快速查找:
valid_users = {"alice", "bob", "charlie"}
if username in valid_users:
print("Access granted")
比较数据:
# 找出两个列表的不同元素
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
diff = set(list1) ^ set(list2) # {1, 2, 5, 6}
set 是 Python 中非常实用的数据结构,在需要快速查找、去重或集合运算时,它是理想的选择。