广告

从零基础到实战:Python set() 函数详解与集合创建方法

本篇文章以“从零基础到实战”为线索,系统讲解 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(),分别对应单元素添加、批量添加、删除指定元素、忽略不存在元素的删除,以及清空集合。

从零基础到实战:Python set() 函数详解与集合创建方法

在使用时需要区分 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() 函数的用法、集合的创建方法,以及在实际编码中的常见应用场景,进而把集合能力落地到去重、筛选、并集/交集计算等高效任务中。核心要点贯穿于创建、操作与实战案例之中,帮助你在日常编程与数据处理工作中提升效率与准确性。

广告

后端开发标签