python中的序列结构——集合set

简介:

        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并,返回一个新集合,包括在集合set1set2中的所有元素
set1 - set2差,返回一个新集合,包括在集合set1但不在set2中的元素
set1 & set2交,返回一个新集合,包括同时在集合set1set2中的元素
set1 ^ set2补,返回一个新集合,包括集合set1set2中的非相同元素
set1<=set2set1 < set2返回True/False,判断set1set2的子集关系
set1 >= set2set1>set2返回True/False,判断set1set2的包含关系
set1 |= set2并,更新集合set1,包括在集合set1set2中的所有元素
set1 -= set2差,更新集合set1,包括在集合set1但不在set2中的元素
set1 &= set2交,更新集合set1,包括同时在集合set1set2中的元素
set1 ^= set2补,更新集合set1,包括集合set1set2中的非相同元素

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 元组 列表 字典 字符串 集合

菜鸟教程 - 学的不仅是技术,更是梦想!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值