Python集合Set详解:创建、运算与常用方法全解析

山海之间
山海之间
发布时间:2026-10-12| 1人浏览过
原创

本文深入解析Python中集合(Set)的核心特性,涵盖通过花括号或set()函数创建集合、利用集合唯一性进行数据去重。详细列举了加减乘除等集合运算符的使用,并系统介绍了add、remove、intersection等常见内置方法及其与对应运算符的区别,帮助开发者高效处理无序且唯一的数据集合。

1. 集合 set 简介

集合最显著的特征在于其元素具有唯一性。它支持元素的增加与删除,进而实现元素的替换,但集合不具备下标索引,因此无法通过下标或切片方式访问其中的元素。可以将集合想象成一个装有不同颜色玻璃球的袋子:你可以替换球,却无法指定某个球在袋中的具体位置。

集合的核心价值在于其元素的唯一性,这使其成为清除重复数据的高效工具。

1.1 使用 { } 直接创建集合

可以使用花括号 {} 直接创建集合,但切勿使用 {} 创建空集合,因为空花括号会被解释为空字典。若要创建空集合,必须使用 set() 函数。

1.2 使用 set() 函数创建集合

利用内置函数 set,可快速将其他类型的可迭代对象转换为集合对象。这些可迭代对象包括字符串、列表、元组等。

print("创建一个空集合")
print(set())
str1 = 'ABCDEF!'
s=set(str1)
print("*"*40)
print("一个由字符串转换的集合,每个元素即唯一的单独字符")
print(s)
list1 = [0,1,2,3,4,3,2,1]
s=set(list1)
print("*"*40)
print("一个由列表转换的集合,但是在列表中重复的元素只会出现一次")
print(s)

2. 集合没有切片功能!

务必理解,集合不支持切片操作。这意味着无法直接对集合进行排序(需先转换为列表再排序),也无法使用 while 循环配合下标逐个获取元素,但可以使用 for 循环进行遍历。

3. 处理集合的常见内置函数

3.1 len 函数

len 函数用于返回集合的长度,即集合中元素的总个数。

3.2 map 函数

map 函数对集合中的每个元素执行相同的操作,返回一个 map 对象,随后使用 set 函数可将其转换回集合。

>>> a
{'sdf', 'er'}
>>> set(map(lambda x:x+"-",a))
{'er-', 'sdf-'}

3.3 filter 函数

filter 函数对集合中的每个元素执行相同的筛选操作,仅保留符合条件的元素,并返回一个 filter 类型的对象。

>>> a
{'sdf', 'er'}
>>> set(filter(lambda x:len(x)==2,a))
{'er'}

3.4 reduce 函数

reduce 函数依次对集合中的元素执行相同的迭代操作,最终合并为一个单一对象。

>>> import functools
>>> a
{'sdf', 'er'}
>>> functools.reduce(lambda x,y:x+"~"+y,a)
'sdf~er'

3.5 sum 函数

sum 函数仅对元素为数值类型的集合有效,用于返回集合中所有元素的总和。若集合中包含非数值元素,将引发 TypeError 错误。

3.6 max 函数

max 函数用于返回集合中的最大元素值。

3.7 min 函数

min 函数用于返回集合中的最小元素值。

>>> a={1,2,3}
>>> sum(a)
6
>>> min(a)
1
>>> max(a)
3
>>> 

3.8 sorted 函数

sorted 函数会按照指定方式对集合进行排序,需注意,该函数返回的是一个已排序的列表,而非集合,且原集合保持不变。

list1 = [0,1,2,3,4,3,2,1]
s=set(list1)
s1=sorted(s)
print(s1)
print(type(s1))

3.9 enumerate 函数

enumerate 函数可用于依次遍历集合中的元素,通常用于获取索引与值的配对。

3.10 any 函数

any() 函数用于判断集合中是否至少有一个元素为真。若所有元素均为 False,则返回 False;只要有一个元素为 True,即返回 True。

3.11 all 函数

all() 函数用于判断集合中的所有元素是否均为真。若全部为 True,则返回 True;否则返回 False。

4. 集合的内置方法

4.1 .add(val)

.add(val) 方法用于向集合中添加一个元素 val。若 val 已存在于集合中,则原集合保持不变。

4.2 .clear()

.clear() 方法用于清空集合中的所有元素。

4.3 .copy()

.copy() 方法返回集合的一个浅拷贝,新集合与原集合不共享内存地址。

4.4 .difference(set1,set2,...)

difference() 方法用于返回集合的差集,即返回包含在第一个集合中但不包含在后续参数集合(set1, set2...)中的元素。

4.5 .difference_update(set1,set2,...)

difference_update() 方法用于从当前集合中移除与一个或多个其他集合共有的元素。

difference_update() 与 difference() 的区别在于:difference() 返回一个移除了相同元素的新集合,而 difference_update() 直接在原集合中执行移除操作,且无返回值。

# 集合的使用
a={1,2,3,4,1}
b={4,5,6,7}
# 1.集合是不会有重复的元素的
print("1. ",a)
# 2.集合使用 add 方法加一个元素
a.add("6")
print("2. ",a)
# 3.集合使用 clear 方法清空
a.clear()
print("3. ",a)
a={1,2,3,4}
# 4.集合使用 copy 方法复制数据
c=a.copy()
print("4. ",c)
# 5.集合使用 difference 方法返回
#   和其他集合不一样的数据
print("5. ",a.difference(b))
# 6.集合使用 difference_update 方法删除
#   和其他集合一样的数据
# a={1,2,3,4}
# b={4,5,6,7}
a={1,2,3,4}
b={4,5,6,7}
print("6. ",a.difference_update(b))
print("6. ",a)
a={1,2,3,4}
c={1}
a.difference_update(b,c)
print("6. ",a)
# 7.集合使用 discard 方法删掉数据 val
a={1,2,3,4}
a.discard(2)
print("7. ",a)

4.6 .discard(val)

.discard 方法用于从集合中删除指定的元素 val。

4.7 .intersection(set1,set2,...)

.intersection 方法用于返回集合的交集,即同时存在于当前集合和参数集合中的元素,原集合不受影响。

4.8 .intersection_update()

.intersection_update 方法将当前集合原地修改为与一个或多个其他集合的交集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> a.intersection(b)
{2, 3, 4, 5}
>>> a
{1, 2, 3, 4, 5}
>>> b
{2, 3, 4, 5, 6, 7}
>>> a.intersection_update(b)
>>> a
{2, 3, 4, 5}
>>> b
{2, 3, 4, 5, 6, 7}

4.9 .isdisjoint()

.isdisjoint 方法用于判断两个集合是否没有共同元素。若无共同元素,返回 True;否则返回 False。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={"a","b"}
>>> a.isdisjoint(b)
False
>>> a.isdisjoint(c)
True

4.10 .issubset(other_set)

.issubset 方法用于判断当前集合是否为参数集合 other_set 的子集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={1}
>>> a.issubset(b)
False
>>> a.issubset(c)
False
>>> c.issubset(a)
True

4.11 .issuperset(other_set)

.issuperset 方法用于判断参数集合 other_set 是否为当前集合的子集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={1}
>>> a.issuperset(b)
False
>>> a.issuperset(c)
True

4.12 .pop()

.pop() 方法用于移除并返回集合中的一个随机元素,原集合中该元素被删除。

请注意,集合的 pop 方法不接受 index 参数。若尝试像列表那样传入 index 参数,将引发 TypeError: pop() takes no arguments (1 given) 错误。

4.13 .remove()

.remove(val) 方法用于删除集合中的指定元素 val,该方法无返回值。若 val 不在集合中,则引发 KeyError 错误。

4.14 .symmetric_difference()

symmetric_difference 方法返回两个集合中不重复的元素集合(即对称差集),且不改变原集合。

4.15 .symmetric_difference_update()

symmetric_difference_update 方法移除当前集合中与指定集合相同的元素,并将指定集合中不同的元素插入到当前集合中。

# 10.集合使用 ^ 操作符返回
#   两个集合中不一样的数据
# 等同于 symmetric_difference方法
a={1,2,3,4}
b={4,5,6,7}
tmp=a^b
print("10. ",tmp) 
print("a==>",a)
print("b==>",b)
print("使用 ^ 操作符 原来的集合不受影响")
print("*"*60)
print("a.symmetric_difference(b)==>",a.symmetric_difference(b))
print("a==>",a)
print("b==>",b)
print("使用 symmetric_difference方法 原来的集合不受影响")
print("*"*60)
print("a.symmetric_difference_update(b)==>",a.symmetric_difference_update(b))
print("使用 symmetric_difference_update 原来的集合会改变")
print("a==>",a)
print("b==>",b)
print("*"*60)

4.16 .union(other_set)

.union 方法返回两个集合的并集,即包含所有元素的集合,且不改变原集合。

4.17 .update(other_set)

.update 方法用于向当前集合中添加其他集合的元素。

>>> a={0,1}
>>> b={3,4}
>>> c={5,6}
>>> a.union(b)
{0, 1, 3, 4}
>>> a
{0, 1}
>>> b
{3, 4}
>>> a.update(b)
>>> a
{0, 1, 3, 4}
>>> b
{3, 4}

5. 集合和运算符

5.1 - 运算符

假设 a、b 是两个集合;a - b 类似于 a.difference(b) 方法,即返回集合 a 中包含而集合 b 中不包含的元素,原集合不受影响。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
{0, 1}
>>> a.difference(b)
{0, 1}

5.2 | 运算符

假设 a、b 是两个集合;a | b 类似于 a.union(b) 方法,即返回集合 a 和 b 中所有的元素,原集合不受影响。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a|b
{0, 1, 2, 3, 4, 5}
>>> a.union(b)
{0, 1, 2, 3, 4, 5}

5.3 & 运算符

假设 a、b 是两个集合;a & b 类似于 a.intersection(b) 方法,即返回集合 a 和 b 中都包含的元素,原集合不受影响。

# 9.集合使用 & 选出集合重叠的部分
#   等同于 insection 方法
a={1,2,3,4}
b={4,5,6,7}
print("*********  初始数据  ***********")
print("a==>",a)
print("b==>",b)
print("8. a & b==>",a & b)
print("执行 a & b 后")
print("a==>",a)
print("b==>",b)
print("使用 & 操作符 原来的集合不受影响")
print("*"*60)
print("8. a.intersection(b)==>",a.intersection(b))
print("使用 intersection 方法 原来的集合不受影响")
print("a==>",a)
print("b==>",b)
print("*"*60)
print("8. a.intersection_update(b)==>",a.intersection_update(b))
print("使用 intersection_update 方法 原来的集合会改变")
print("a==>",a)
print("b==>",b)
print("*"*60)

5.4 ^ 运算符

假设 a、b 是两个集合;a ^ b 类似于 a.symmetric_difference(b) 方法,即返回不同时包含于 a 和 b 的元素(对称差集),原集合不受影响。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a.symmetric_difference(b)
{0, 1, 4, 5}
>>> a^b
{0, 1, 4, 5}

5.5 in 、not in 运算符

in 运算符用于判断某个元素是否属于某个集合。

not in 运算符用于判断某个元素是否不属于某个集合。

>>> a={0,1,2,3}
>>> 0 in a
True
>>> "0" in a
False

总结

本文介绍了Python集合的基础知识与应用,希望能为读者提供帮助,也欢迎大家关注本站获取更多技术内容!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。