Python集合set()使用的方法详解

阿麦
阿麦
发布时间:2026-10-15| 5人浏览过
原创

本文详解Python中集合set()的创建、增删改查操作及常用方法。涵盖无序不重复特性、与字典的区别、add/update/discard等增删方法,以及交集、并集、差集运算。同时对比list、tuple、dict与set的异同,并说明各类型间的转换规则与注意事项。

在Python 3中,根据数据类型的可变性,大致可分为以下两类:

  • 不可变数据类型(3种):Number(数值)、String(字符串)、Tuple(元组);
  • 可变数据类型(3种):List(列表)、Dictionary(字典)、Set(集合)。

1. 集合的特点

集合具有无序性和唯一性,不包含重复元素,且元素存储无序(因此集合不支持下标索引和切片操作)。set的主要作用是对数据进行去重处理。

2. 创建语法为 { },需与字典区分:当花括号内的元素不是键值对形式时,该结构表示集合。

3. 集合的底层实现实际上是通过字典封装完成的。

2. set的创建

可以使用大括号 { } 或者 set() 函数来创建集合。需要注意的是,创建空集合时必须使用 set() 而非 { },因为 { } 在Python中表示空字典。

1. 使用 set() 函数创建集合

person2 = set(("hello","jerry",133,11,133,"jerru")) #只能传入一个参数,可以是list,tuple等 类型
print(len(person2))
print(person2)
'''
5
{133, 'jerry', 11, 'jerru', 'hello'}
'''

2. add() 方法

a=set()
a.add("a")
a.add("b")
print(a)

3. 使用 { } 创建集合。注意:空集合必须用 set() 函数表示,不能写作 a={}。

person ={"student","teacher","babe",123,321,123} #同样各种类型嵌套,可以赋值重复数据,但是存储会去重
print(len(person))  #存放了6个数据,长度显示是5,存储是自动去重
print(person) #但是显示出来则是去重的
'''
5
{321, 'teacher', 'student', 'babe', 123}
'''
#空set集合用set()函数表示
person1 = set() #表示空set,不能用person1={}
print(len(person1))
print(person1)
'''
0
set()
'''

4. 集合类型的转换

a=["awe","weg","dawqgg"]
c=set(a)
print(c)
b="chenshuagege"
d=set(b)
print(d)
al=("233","34455")
aw=set(al)
print(al)

3. 常见使用注意事项

#set对字符串也会去重,因为字符串属于序列。
str1 = set("abcdefgabcdefghi")
str2 = set("abcdefgabcdefgh")
print(str1,str2)
print(str1 - str2) #-号可以求差集
print(str2 - str1)  #空值
#print(str1 + str2)  #set里不能使用+号
====================================================================
{'d', 'i', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'d', 'e', 'f', 'a', 'g', 'b', 'h', 'c'}
{'i'}
set()

4. set的常用方法

4.1 set集合的增删改查操作

  • add:用于向集合中添加单个元素。
  • update:用于合并集合,将另一个可迭代对象中的元素添加到当前集合。
  • remove:尝试移除集合中不存在的元素时,会引发报错。
  • discard:尝试移除集合中不存在的元素时,不会报错,静默处理。
  • del:仅可用于删除整个集合对象,不能用于删除集合内的元素,因为元素在集合中无序排列,没有下标索引。
  • clear:清空集合中的所有元素,使集合变为空集合。
  • pop:随机删除并返回集合中的一个元素。
#1.给set集合增加数据
person ={"student","teacher","babe",123,321,123}
person.add("student") #如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,区别update
print(person)
person.add((1,23,"hello")) #可以添加元组,但不能是list
print(person)
'''
{321, 'babe', 'teacher', 'student', 123}
{(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123}
'''
# update用于集合的合并,可以把多个集合添加到一个集合里面。可以iterar的数据都可以添加成set集合
person.update("abc")#使用update不能添加字符串,会拆分
print(person)  #会将字符串拆分成a,b,c三个元素
'''
{321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123}
'''
set1 = set()
set1.add('武动乾坤')
set2 = {'jsy', '稻香', '爱的代价', '大碗宽面'}
set2.update(set1)
print(set2)
'''
{'大碗宽面', 'jsy', '爱的代价', '稻香', '武动乾坤'}
'''
#2.从set里删除数据
person.remove("student")#按元素去删除
print(person)
#print("student")如果不存在 ,会报错。
'''
{321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123}
'''
person.discard("student")#功能和remove一样,好处是没有的话,不会报错
ret = person.pop() #在list里默认删除最后一个,在set里随机删除一个。
print(person)
print(ret) #pop()返回的是被删除掉的那一项
'''
{1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'}
'''
#3.更新set中某个元素,因为是无序的,所以不能用角标
#所以一般更新都是使用remove,然后在add
#4.查询是否存在,无法返回索引,使用in判断
if "teacher" in person:
    print("true")
else:
    print("不存在")
'''
true
'''
#5.终极大招:直接清空set
print(person)
person.clear()
print(person)
'''
set()
'''

4.2 其它用法

集合支持交集(intersection)、并集(union)和差集(difference)操作。这些运算也可以通过运算符表示:交集使用 &,并集使用 |,差集使用 -。

#取两者的交集
b={1,23}
a={23,5}
ret=b.intersection(a)
print(ret)
#取两者的交集,intersection_update会改变b的内容
b={1,23}
a={23,5}
b.intersection_update(a)
print(b)
#union是把两个set集合合起来
a={"a","b","c"}
b={"a","wa"}
wt=a.union(b)
print(wt)
#difference表示的意思是a中的内容b是没有的,但是这个不会修改a自身的值,而是付给ret了
a={"12","14","234"}
b={"12","23"}
ret=a.difference(b)
print(ret)
#difference_update表示的意思是a中的内容b是没有的,执行完,会修改a的内容
a={"12","14","234"}
b={"12","23"}
a.difference_update(b)
print(a)
#symmetric_difference为把两个set集合里相同的内容当作边然后取这边两边的内容
a={"a","b","c"}
b={"a","wa"}
ret=a.symmetric_difference(b)
print(ret)
a.symmetric_difference(b)
print(a)
#可用运算符表示交集,并集,差集
set2 = {1, 2, 3, 4, 5}
set3 = {3, 4, 5, 6, 7, 8, 9} 
print(set2 & set3)  # 交集符号  &
print(set2 | set3)  # 并集符号 |
print(set2 - set3)  # 差集符号 -
b={1,23}
a={23,5}
#如果a与b有集合的话,就返回false;如果没有集合的话,就返回true
ret=b.isdisjoint(a)
print(ret)
b={1,23,5}
a={23,5}
#issuperset说明b是否是a的父亲,如果是就输出true,如果不是输出false
ret=b.issuperset(a)
print(ret)
b={1,23,5}
a={23,5}
#b是否是a的子,如果是就输出true,如果不是就输出false
ret=b.issubset(a)
print(ret)

5. 列表、元组、字典与集合的对比

  • list:允许元素重复,保持有序,支持下标索引和切片操作。
  • tuple:允许元素重复,内部元素不可进行增删改操作,仅支持查看。
  • dict:字典中的元素以键值对形式存在,键具有唯一性,值可以重复。
  • set:元素不允许重复,且具有无序性。

5.1 它们之间的类型转换

1. 列表、元组和集合三者之间可以相互转换。

list -----> tuple, set:列表转换为集合时,注意原列表若包含重复元素,转换后集合长度会缩短(自动去重)。

tuple -----> list, set

set -----> list, tuple

2. 当涉及字典的转换时,需特殊处理。

dict -----> list, tuple:仅能将字典的键转换为列表或元组,无法直接转换值。

list -----> dict:列表内的元素必须是列表或元组,且每个子序列仅包含两个元素时,才能成功转换为字典。

list = [['a', {1}], ('', 2), ('c', 3)]
print(dict(list))

输出示例:

{‘a’: {1}, ‘’: 2, ‘c’: 3}

5.2 集合和列表方法上的区别

正是由于集合的无序性和缺乏下标索引,其操作方法与列表存在显著差异。

  • 列表方法:append(添加元素)、extend(实现列表拼接)。
  • 集合方法:insert(在指定下标插入元素,仅列表支持) -----> list;add(添加元素)、update(合并两个集合) -----> set。

总结

本文到此结束,希望能为读者提供有益的帮助,也欢迎大家关注本站以获取更多技术内容!

相关标签:

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

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 算法库。