首页 > Python之路 > python数据结构set集合

python数据结构set集合

集合set

    set 翻译为集合
    conllection翻译为集合类型,是一个大概率
set:
    可变的、无序的、不重复的元素的集合
    不可变的可以放,可变的会提示报错不可哈希

set定义初始化

set()   --> new empty set object
set(iterable)  -->new set objects
举例:
s1 = set()
s2 = set(range(5))
s3 = set(list(rnage(10)))
s4 = {1,2,3}

set的元素

    set的元素要求必须是可以hash
    目前学过的不可hash类型有list,set
    元素不可以索引(无序,通过hash值确认元素速度快)
    set可以迭代

set增加

add(elem)
        增加一个元素到set中
        如果元素存在,什么都不做
    update(*other)
        合并其它元素到set集合zhonf
        参数others必须是可以迭代的对象
        就地修改

set删除

remove(elem)
        从set中移除一个元素
        元素不存在时,抛出KeyError异常
    discard(elem)
        从set中移除一个元素
        元素不存在时,什么都不做(推荐使用,避免异常出现)
    pop()   --> item    
        移除并返回任意元素
        空集返回KeyErroe异常
    clear()
        移除所有元素

set修改查询

修改
        要么删除,要么加入新元素,因为不重复每个元素唯一,没必要修改
    查询
        非线性结构无法索引(无序)
     遍历
        可以迭代所有元素
    成员运算符in与not in判断元素在set中效率高,使用hash值确认元素,效率快

set和线性结构

    线性结构的查询时间复杂度是0(n),即随着数据规模的增大而加大耗时
    set 、dict等结构,内部使用hash值做key,时间复杂度可以做到O(1),查询时间和数据规模无关

可hash

数值型 int,float、complex
        布尔型 True 、False
        字符型 string 、bytes
        tuple
        None
        以上都是不可变类型,成为可hash类型,hashable

set的元素必须是可hash的

集合

基本概念
    全集
        所有元素的集合,列如实数集,所有实数组成的集合
    子集subset和超集superset
        一个集合A所有元素都在另一个集合B中,A是B的子集,B是A的超集
    真子集和真超集
        A是B的子集,且A不等于B,A是B的真子集,B是A的真超集
    并集:多个集合的合并的结果
    交集:多个集合的公共部分
    差集:集合中出去和其他集合公共部分

集合运算

集合运算:

并集:
    将两个集合A和B的所有元素合并到一起,组成的集合称作集合A与集合B的并集
        |    返回多个集合合并后的新的集合
        |=   和多个集合合并,就地修改

并集图:

交集:
    集合A和B,所有属于A且属于B的元素组成的集合
    &    返回多个集合的交集(返回新的集合)
    &=  获取和多个集合的交集,并就地修改

交集图:
差集::
    集合A和B,由所有属于A且不属于B的元素组成的集合
    -     返回和多个集合的差集(返回新的差集)
    -=   获取和多个集合的差集并就地修改

差集图:
对称差集:
    集合A和B,由所有不属于A和B的交集元素组成的集合,记作  (A-B)u  (B-A)
    ^    返回和另一个集合的对称差集(返回新的集合)
    ^=   获取和另一个集合的对称差集并就地修改

对称差集图:

 集合判断

集合判断:
    set1 <=  set2   判断set1是否是set2的子集
    set1 <    set2   判断set1是否是set2的真子集
    set1 >=  set2   判断set1是否是set2的超集
    set1 >    set2   判断set1是否是set2的真超集
    isdisjoint(other)   判断当前集合和另一个集合没有交集,没有交集返回True

集合应用

集合应用:
共同好友:  你的好友A、B、C,他的好友C、B、D,求共同好友
交集问题:gthy = {'A','B','C'} -  {'C','B','D'}

微信群提醒:xxxx与群里其他人都不是微信朋友关系
并集问题: userid in (A|B|C|.....) == False   ,A,B,C等是微信好友的并集,所有用户id不在这个并集中,说明他和任何人都不是朋友

权限判断: 有一个api,要求权限同时具备A,B,C才能访问,用户权限是B,C,D,判断用户是否能够访问该api
api集合A   权限集合P
A - P ={}   A减P为差集空,说明P包含A
A & P = A  A交P并集为A,说明两个集合完全相等

权限判断: 有一个api,要求权限具备A,B,C任意一项就能访问,用户权限是B,C,D,判断用户是否能够访问该api
api集合A   权限集合P
A & P = !{}         A与P并集差不为空,说明有交集
A.isdisjoint(P)  == False  A与P没有交集为False,说明两个集合有交集

一个总认为列表,存储所有任务,一个已完成的任务列表,找出未完成的任务
业务中,任务ID一般不可以重复
所有任务ID放到一个set中,假设为all
所有已完成任务id放到一个set中,假设为completed,它是all的自己
all-completed = uncompleted   未完成的


  •   正在提交中,请稍候...
      评论提交成功
    回复 的评论,点击取消回复。