本篇文章以“从零基础到实战”为线索,系统讲解 Python 的 set() 函数及集合的创建方法,帮助你快速理解集合的核心概念、创建技巧和常见场景应用。通过示例代码与对比讲解,让初学者也能在实践中掌握集合的去重、运算和高效筛选能力。
1. set() 函数的基本概念与创建入口
1.1 set 的定义、特性与可哈希性
集合(set)是 Python 中的一种无序、不可重复的数据结构,其核心特性是存储唯一元素。与列表和元组不同,集合要求其中的元素必须是可哈希的,即不可变对象。了解这一点对于选择合适的数据类型至关重要,因为不可哈希的元素(如 list、dict)不能放入集合中。
在使用放入集合时,自动去重是集合的天然特性,这让集合成为快速去重和去重后统计数量的理想选择。需要注意的是,集合是可变对象,你可以随时添加或删除元素,但元素本身一旦加入集合就保持不可重复。
1.2 set() 的基本用法与签名
set() 是 Python 的内置构造函数,用于创建集合,也可以把可迭代对象转成集合。其签名为 set(iterable=None),如果不传入参数,将得到一个空集合。
通过不同的可迭代对象创建集合时,返回结果中元素的顺序不可预测,但集合中不会出现重复值。下面的示例展示了不同输入的结果差异。
# 通过空构造函数创建空集合
s_empty = set()
print(s_empty) # set()# 通过可迭代对象创建集合,自动去重
s_from_list = set([1, 2, 2, 3])
print(s_from_list) # {1, 2, 3}# 通过字符串创建集合,得到字符集合
s_from_string = set('hello')
print(s_from_string) # {'e', 'h', 'l', 'o'} # 顺序可能不同
2. 集合的创建方式与常见误区
2.1 使用字面量创建集合与空集合的要点
字面量创建集合的语法是用花括号,如 {1, 2, 3}。需要特别注意空集合与空字典的区分:空字典用 {},而空集合必须用 set() 创建。
在实际编码中,错误地写成空字典来表示空集合会导致类型不一致,影响后续的集合操作。因此,尽量从空集合开始,逐步用 set() 构造。
# 使用字面量创建集合
s_literal = {1, 2, 3}
print(s_literal) # {1, 2, 3}# 空集合的正确创建方式
s_empty = set()
print(s_empty) # set()# 空字典与空集合的区别
d_empty = {}
print(type(d_empty)) #
print(type(s_empty)) #
2.2 通过可迭代对象创建集合的实践要点
使用 set() 将可迭代对象转换为集合时,不仅去重,还会改变数据的类型呈现,具体取决于可迭代对象的元素类型。
常见做法包括从列表、元组、字符串或字典的键创建集合。需要注意的是,字典在转换时只会保留键,且键必须可哈希。
# 从列表创建集合(去重)
nums = [1, 2, 2, 3, 4]
s_from_list = set(nums)
print(s_from_list) # {1, 2, 3, 4}# 从元组创建集合
t = (5, 5, 6)
s_from_tuple = set(t)
print(s_from_tuple) # {5, 6}# 从字符串创建集合(字符去重)
s_from_str = set('abracadabra')
print(s_from_str) # {'a', 'b', 'r', 'c', 'd'}
3. 常用操作与实战运用
3.1 添加、删除与清空集合中的元素
集合提供了多种方法来添加和移除元素:add()、update()、remove()、discard()、clear(),分别对应单元素添加、批量添加、删除指定元素、忽略不存在元素的删除,以及清空集合。
在使用时需要区分 remove() 与 discard() 的差异:remove 会在元素不存在时抛出 KeyError,而 discard 不会,因此在删除前通常会进行存在性检查或使用 discard。
s = {1, 2, 3}
s.add(4) # 单元素添加
s.update([5, 6]) # 批量添加
print(s) # {1, 2, 3, 4, 5, 6}s.remove(2) # 删除元素 2
print(s) # {1, 3, 4, 5, 6}s.discard(10) # 不存在的元素不会报错
s.clear() # 清空集合
print(s) # set()
3.2 集合间的运算与就地更新
集合之间的运算是 Python 的强大功能之一,常用的运算包括并集、交集、差集、对称差集等;此外,就地更新方法如 update、intersection_update 等可提升性能。
常用运算符和方法示例如下:|、&、-、^ 分别表示并集、交集、差集、对称差集;就地版本如 .update()、.intersection_update() 直接修改原集合。
A = {1, 2, 3}
B = {2, 3, 4}# 并集、交集、差集、对称差集
print(A | B) # {1, 2, 3, 4}
print(A & B) # {2, 3}
print(A - B) # {1}
print(A ^ B) # {1, 4}# 就地更新
A.update(B) # A 变为 {1, 2, 3, 4}
A.intersection_update({2, 4}) # A 变为 {2, 4}
print(A)
4. 实战案例:从零基础到实战的应用场景
4.1 案例:文本去重与长度统计
在文本处理场景中,使用集合去重更高效,可快速统计唯一单词的数量或筛选重复单词。将文本分词得到单词序列后,用集合去重再统计长度,既简洁又高效。
以下示例演示了从文本中提取唯一单词并统计数量的过程,便于后续的文本分析或特征提取。
text = "Python 的 set() 函数 可以 去重 集合 以及 进行 集合 运算"
words = text.split()
unique_words = set(words)
print(len(unique_words)) # 8
print(unique_words) # 看到去重后的单词集合
4.2 案例:从两个列表提取并集、交集及差集进行筛选
现实场景中,经常需要对比两个列表的元素,快速得到并集、交集以及差集,以实现去重、筛选或标签对比等需求。将列表转为集合后进行运算,性能更优,且代码简洁直观。
下面的代码展示了如何实现这类筛选,以及结果在后续数据处理中的直接利用方式。
list_a = [1, 2, 2, 3, 4]
list_b = [3, 4, 4, 5, 6]set_a = set(list_a)
set_b = set(list_b)union = set_a | set_b # 并集
intersection = set_a & set_b # 交集
difference = set_a - set_b # 差集print(union) # {1, 2, 3, 4, 5, 6}
print(intersection) # {3, 4}
print(difference) # {1, 2}
通过以上几部分内容,你可以从零基础逐步掌握 Python set() 函数的用法、集合的创建方法,以及在实际编码中的常见应用场景,进而把集合能力落地到去重、筛选、并集/交集计算等高效任务中。核心要点贯穿于创建、操作与实战案例之中,帮助你在日常编程与数据处理工作中提升效率与准确性。



