简介:
set()是一个集合,里面不允许重复的元素。里面的内容是随意的、无序的,可以计算交集、差集、并集等。
{element1, element2, ..., elementn}
Python 集合会将所有元素放在一对大括号{}
中,相邻元素之间用“,”
分隔。从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则Python
解释器会抛出TypeError
错误。
基本操作:
1、创建集合
Python 提供了2种创建 set 集合的方法,分别是使用{} 创建和使用 set() 函数
将字符串、列表、元组等类型数据转换为集合。
1.1 使用{}创建集合
创建set集合可以像列表、元素和字典一样,直接将集合赋值给变量,从而实现创建集合的目的,其语法格式如下:
setname = {element1,element2,...,elementn}
setname为集合名称,举例:
>>> a = {1,'c',1,(1,2,3),'c'}
>>> print(a)
{1, (1, 2, 3), 'c'}
>>>
2.2 使用set()函数创建集合
set()函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。该函数的语法格式如下:
setname = set(iteration)
其中,iteration 就表示字符串、列表、元组、range 对象等数据,举例:
>>> set1 = set("python")
>>> set2 = set([1, 2, 3, 4])
>>> set3 = set((1, 2, 3, 4))
>>> print(set1)
{'o', 'h', 'p', 'y', 'n', 't'}
>>> print(set2)
{1, 2, 3, 4}
>>> print(set3)
{1, 2, 3, 4}
>>>
2、访问集合元素
由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来。
举例:
>>> set = {1, 'c', 1, (1, 2, 3), 'c'}
>>> for ele in set:
... print(ele, end=' ')
1 (1, 2, 3) c # 输出
>>>
>>> a = {1,2,3}
>>> a.add((1,2)) # 用add()增加元素
>>> print(a)
{(1, 2), 1, 2, 3}
>>> a.update([1,2]) # update()增加元素,添加的元素可以使列表、元组、字典
>>> print(a)
{(1, 2), 1, 2, 3}
>>>
3、删除集合
和其他序列类型一样,也可以使用del()语句。
>>> a = {1,'c',1,(1,2,3),'c'}
>>> print(a)
{1, (1, 2, 3), 'c'}
>>> del(a) # 删除集合
>>> print(a) # 打印报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
4、集合中添加元素
s.add(x)将元素x添加到集合s 中,如果元素已存在,则不进行任何操作。s.update(x)也可以添加元素,且参数可以是列表,元组,字典等。
>>> a = {1,2,3}
>>> a.add((1,2)) # 用add()添加元素
>>> print(a)
{(1, 2), 1, 2, 3}
>>> a.update([1,2]) # 用update()添加元素,参数可以是列表、元组、字典
>>> print(a)
{(1, 2), 1, 2, 3}
>>>
5、集合中删除元素
删除现有 set 集合中的指定元素,可以使用 remove() 方法,使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,则此方法会抛出 KeyError 错误,举例:
>>> a = {1,2,3}
>>> a.remove(1) # 移除元素1
>>> print(a)
{2, 3}
>>> a.remove(1) # 移除元素,元素不存在报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>>
如果我们不想在删除失败时令解释器提示 KeyError 错误,还可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,此方法不会抛出任何错误,举例:
>>> a = {1,2,3}
>>> a.discard(1) # 移除元素 1
>>> print(a)
{2, 3}
>>> a.discard(1) # 移除元素,元素不存在,继续执行
>>> print(a)
{2, 3}
>>>
s.pop()可以设置随机删除集合中的一个元素,举例:
>>> a = {1,2,3}
>>> a.pop() # 随机弹出元素
1
>>> a.pop()
2
>>>
6、集合的运算
集合最常做的操作就是进行交集、并集、差集以及对称差集运算,和数学上的相同
操作符及应用 | 描述 |
set1 | set2 | 并,返回一个新集合,包括在集合set1 和set2 中的所有元素 |
set1 - set2 | 差,返回一个新集合,包括在集合set1 但不在set2 中的元素 |
set1 & set2 | 交,返回一个新集合,包括同时在集合set1 和set2 中的元素 |
set1 ^ set2 | 补,返回一个新集合,包括集合set1 和set2 中的非相同元素 |
set1<=set2 或set1 < set2 | 返回True/False ,判断set1 和set2 的子集关系 |
set1 >= set2 或set1>set2 | 返回True/False ,判断set1 和set2 的包含关系 |
set1 |= set2 | 并,更新集合set1 ,包括在集合set1 和set2 中的所有元素 |
set1 -= set2 | 差,更新集合set1 ,包括在集合set1 但不在set2 中的元素 |
set1 &= set2 | 交,更新集合set1 ,包括同时在集合set1 和set2 中的元素 |
set1 ^= set2 | 补,更新集合set1 ,包括集合set1 和set2 中的非相同元素 |
7、常用方法
>>> dir(set) # 打印所有方法
[ 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>>
python中集合set常用方法
方法名 | 语法格式 | 功能 | 实例 |
---|---|---|---|
add() | set1.add() | 向 set1 集合中添加数字、字符串、元组或者布尔类型 | >>> set1 = {1,2,3} >>> set1.add((1,2)) >>> set1 {(1, 2), 1, 2, 3} |
clear() | set1.clear() | 清空 set1 集合中所有元素 | >>> set1 = {1,2,3} >>> set1.clear() >>> set1 set() set()才表示空集合,{}表示的是空字典 |
copy() | set2 = set1.copy() | 拷贝 set1 集合给 set2 | >>> a = {1,2,3} >>> b = {4,5,6} >>> b = a.copy() >>> a {1, 2, 3} >>> b {1, 2, 3} >>> |
difference() | set3 = set1.difference(set2) | 将 set1 中有而 set2 没有的元素给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.difference(set2) >>> set3 {1, 2} |
difference_update() | set1.difference_update(set2) | 从 set1 中删除与 set2 相同的元素 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.difference_update(set2) >>> set1 {1, 2} |
discard() | set1.discard(elem) | 删除 set1 中的 elem 元素 | >>> set1 = {1,2,3} >>> set1.discard(2) >>> set1 {1, 3} >>> set1.discard(4) {1, 3} |
intersection() | set3 = set1.intersection(set2) | 取 set1 和 set2 的交集给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.intersection(set2) >>> set3 {3} |
intersection_update() | set1. intersection_update(set2) | 取 set1和 set2 的交集,并更新给 set1 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.intersection_update(set2) >>> set1 {3} |
isdisjoint() | set1.isdisjoint(set2) | 判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.isdisjoint(set2) False |
issubset() | set1.issubset(set2) | 判断 set1 是否是 set2 的子集 | >>> set1 = {1,2,3} >>> set2 = {1,2} >>> set1.issubset(set2) False |
issuperset() | set1.issuperset(set2) | 判断 set2 是否是 set1 的子集 | >>> set1 = {1,2,3} >>> set2 = {1,2} >>> set1.issuperset(set2) True |
pop() | a = set1.pop() | 取 set1 中一个元素,并赋值给 a | >>> set1 = {1,2,3} >>> a = set1.pop() >>> set1 {2,3} >>> a 1 |
remove() | set1.remove(elem) | 移除 set1 中的 elem 元素 | >>> set1 = {1,2,3} >>> set1.remove(2) >>> set1 {1, 3} >>> set1.remove(4) Traceback (most recent call last): File "<pyshell#90>", line 1, in <module> set1.remove(4) KeyError: 4 |
symmetric_difference() | set3 = set1. symmetric_difference(set2) | 取 set1 和 set2 中互不相同的元素,给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.symmetric_difference(set2) >>> set3 {1, 2, 4} |
symmetric_ difference_update() | set1.symmetric_ difference_update(set2) | 取 set1 和 set2 中互不相同的元素,并更新给 set1 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.symmetric_difference_update(set2) >>> set1 {1, 2, 4} |
union() | set3 = set1.union(set2) | 取 set1 和 set2 的并集,赋给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3=set1.union(set2) >>> set3 {1, 2, 3, 4} |
update() | set1.update(elem) | 添加列表或集合中的元素到 set1 | >>> set1 = {1,2,3} >>> set1.update([3,4]) >>> set1 {1,2,3,4} |
参考:
【Python】set集合详解_一个写湿的程序猿的博客-CSDN博客_python set集合
Python基础篇(三)-- 列表、元组、字典、集合、字符串_长路漫漫2021的博客-CSDN博客_python 元组 列表 字典 字符串 集合