Python集合Set详解:创建、运算与常用方法全解析
本文深入解析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)
True4.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)
True4.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)
True4.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集合的基础知识与应用,希望能为读者提供帮助,也欢迎大家关注本站获取更多技术内容!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









