首页 > 编程语言 >Python集合(Set)常用操作

Python集合(Set)常用操作

时间:2022-08-19 17:23:21浏览次数:64  
标签:11 Set 22 Python print 33 集合 se

定义

set是一个无序且不重复的元素集合。
集合对象是一组无序排列可哈希的值,集合成员可以做字典中的键。集合用innot in操作符检查成员,以len()內建函数得到集合的基数(大小),用for循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。
set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

  1. 不重复
  2. 元素为不可变对象

创建

方式一

先初始化再赋值

s = set()
s = {11,22,33,44}  #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典

方式二

直接创建

a=set('boy')
d={'k1','k2','k2'}

方式三

利用list创建

b=set(['y', 'b', 'o','o'])

方式四

利用dict创建,将会使用dict中的key值作为set的值

Input:

c=set({"k1":'v1','k2':'v2'})
c

Output:

{'k1', 'k2'}

方式五

使用tuple创建

e={('k1', 'k2','k2')}

更新(增加)

update

Input:

se = {11, 22, 33}
be = {22,44,55}

se.update(be)  # 把se和be合并,得出的值覆盖se
print(se)
se.update([66, 77])  # 可增加迭代项
print(se)

Output:

{33, 22, 55, 11, 44}
{33, 66, 22, 55, 11, 44, 77}

删除

discard()remove()pop()

Input:

se = {11, 22, 33}
se.discard(11)
se.discard(44)  # 移除不存的元素不会报错
print(se)

Output:

{33, 22}

Input:

se = {11, 22, 33}
se.remove(11)
se.remove(44)  # 移除不存的元素会报错
print(se)

Output:

    ---------------------------------------------------------------------------

    KeyError                                  Traceback (most recent call last)

    <ipython-input-15-7256c38824cb> in <module>()
          1 se = {11, 22, 33}
          2 se.remove(11)
    ----> 3 se.remove(44)  # 移除不存的元素会报错
          4 print(se)


    KeyError: 44

集合操作

交集

intersection, intersection_update,也可以使用a&b

Input:

temp1 = se.intersection(be)             #取交集,赋给新值
print(temp1)  # 22
print(se)  # {11, 22, 33}

temp2 = se.intersection_update(be)      #取交集并更新自己
print(temp2)  # None
print(se)  # 22
print(se&be)

Output:

{22}
{22}
None
{22}
{22}

并集

union,也可以使用a|b

Input:

se = {11, 22, 33}
be = {22,44,55}

temp=se.union(be)   #取并集,并赋新值
print(se)       #{33, 11, 22}
print(temp)     #{33, 22, 55, 11, 44}
print(se|be)

Output:

{33, 11, 22}
{33, 22, 55, 11, 44}
{33, 22, 55, 11, 44}

差集

difference, difference_update,也可以使用a-b

Input:

se = {11, 22, 33}
be = {22, 55}
temp1 = se.difference(be)        #找到se中存在,be中不存在的集合,返回新值
print(temp1)        #{33, 11}
print(se-be)
print(se)        #{33, 11, 22}

Output:

{33, 11}
{33, 11}
{33, 11, 22}

Input:

temp2 = se.difference_update(be) #找到se中存在,be中不存在的集合,覆盖掉se
print(temp2)        #None
print(se)           #{33, 11}

Output:

None
{33, 11}

Input:

se = {11, 22, 33}  # 移除末尾元素并把移除的元素赋给新值
temp = se.pop()
print(temp)  # 33
print(se) # {11, 22}

Output:

33
{11, 22}

包含关系

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

  • set.isdisjoint(s):判断两个集合是不是不相交
  • set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
  • set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

如果要真包含关系,就用符号操作><

Input:

se = {11, 22, 33}
be = {22}

print(se.isdisjoint(be))        #False,判断是否不存在交集(有交集False,无交集True)
print(se.issubset(be))          #False,判断se是否是be的子集合
print(se <= be)
print(se.issuperset(be))        #True,判断se是否是be的父集合
print(se >= be)

Output:

False
False
False
True
True

合并

symmetric_difference, symmetric_difference_update

Input:

se = {11, 22, 33}
be = {22}

temp1 = se.symmetric_difference(be)  # 合并不同项,并赋新值
print(temp1)    #{33, 11}
print(se)       #{33, 11, 22}

temp2 = se.symmetric_difference_update(be)  # 合并不同项,并更新自己
print(temp2)    #None
print(se)             #{33, 11}

Output:

{33, 11}
{33, 11, 22}
None
{33, 11}

集合的转换

集合可以转换为list,tuple以及str

Input:

se = set(range(4))
li = list(se)
tu = tuple(se)
st = str(se)
print(li,type(li))
print(tu,type(tu))
print(st,type(st))

Output:

[0, 1, 2, 3] <class 'list'>
(0, 1, 2, 3) <class 'tuple'>
{0, 1, 2, 3} <class 'str'>

不变集合

Python提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset,使用方法如下

Input:

a = frozenset("hello")
a

Output:

frozenset({'e', 'h', 'l', 'o'})

需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。如果要一个有frozenset中的所有元素的普通集合,只需把它当作参数传入集合的构造函数中即可:

Input:

a = frozenset("hello")
a = set(a)
a.add(12)
a

Output:

{12, 'e', 'h', 'l', 'o'}


标签:11,Set,22,Python,print,33,集合,se
From: https://www.cnblogs.com/weifeng1463/p/16602728.html

相关文章

  • linux taskset
    linuxtasksettaskset命令属于util-linux-ng包,可以使用yum直接安装taskset命令用于设置或者获取一直指定的PID对于CPU核的运行依赖关系。也可以用taskset启......
  • python基础语法获取列表中的多个元素_切片操作
    list=[10,20,30,40,50,60,70,80]print(list[6:0:-2])print(list[6:0:-1])print(list[6:0:-1])print(list[1:6:1])E:\PycharmProjects\pythonProject\venv\Scripts......
  • python 动态导入模块并结合反射,动态获取类、方法(反射太好用)
    背景: 关键字驱动框架,不同的关键字方法分别定义在不同的类,真正执行关键字方法又在不同的类(简称A),这样就需要在执行前,要在文件A下import要使用的模块,如果有很多页面操作或很......
  • 小恐龙快跑,不要被逮到拉~ python制作小恐龙游戏
    前言嗨喽~大家好呀,这里是魔王呐!  这个小恐龙熟悉叭,相信你在摸鱼得时候玩过它~这是谷歌流量器中很有名的彩蛋:当你网络出现问题时,就会出现一个“小恐龙游戏”。......
  • Python基础之reduce函数
    哈喽大家好,今天说一下reduce函数的使用方法,以及与for循环的对比。reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。reduce函数先从......
  • python JSON.parse
    一、JSON的解析方法有两种:eval()和JSON.parse()varjsonstr='{"str1":"Hello,","str2":"world!"}';varevalJson=eval('('+jsonstr+')');varjsonParseJson=JSON.parse......
  • python基础-函数式编程
    概念:电脑运算视作数学上的函数计算高阶函数:map,reduce,filter无副作用,相同的参数调用时钟产生同样的结果闭包Closure例子:defcache(func):store={}#外部自由......
  • java-集合
    目录集合的分类:单列集合双列集合集合的分类:单列集合:只能存储一列数据的集合双列集合:有两列可以存储数据,是key-value键值对进行存储集合的框架:单列集合主要是Colle......
  • No module named 'setuptools_rust' 安装oss2报错
    今天在测试机器上安装oss2报错了:Nomodulenamed'setuptools_rust'经过查询后记录一下OSS2介绍官方文档:https://help.aliyun.com/document_detail/32027.html一句......
  • python将代码打包成whl或者压缩文件使用pip安装
    需要条件:安装setuptools,wheel创建目录helloworld—init.py—代码1.py—代码2.pysetup.py编辑__init__.pyfromhelloworldimport代码1,代码2在helloworld同级下......