zoukankan      html  css  js  c++  java
  • python set集合

    集合set

    • 可变的
    • 无序的
    • 不重复的元素集合

    set定义 初始化

    set() 生成一个空集合

    set(iterable) 可通过可迭代对象生产一个新的集合

    s1 = set()
    s2 = set(range(5))
    s3 = set(list(range(10)))
    s4 = {} #这是字典的定义方法
    s5 = {9,10,11} # set
    s6 = {(1,2),3,'a'}
    s7 = {[1],(1,),1} # set的元素要求必须可以hash  列表不能hash
    • set的元素要求必须可以hash
    • 目前学过的不可hash的类型有list、set
    • 元素不可以索引
    • set可以迭代

    set增加

    add(elem)

    • 增加一个元素到set中
    • 如果元素存在,什么都不做

    update(*others)

    • 合并其他元素到set元素中来
    • 参数others必须是可迭代对象
    • 就地修改

    set删除

    remove(elem)

    • 从set中移除一个元素
    • 元素不存在,抛出异常keyError异常

    discard(elem)

    • 从set中移除一个元素
    • 元素不存在,什么都不做

    pop() -> item

    • 移除并返回任意的元素
    • 空集返回KeyError异常

    clear()

    • 移除所有元素

    集合

    基本概念

    全集

    • 所有元素的集合。例如实数集,所有实数组成的集合就是全集

    子集subset和超集superset

    • 一个集合A所有元素都在另一个集合B内,A是B的子集,B是A的超集

    真子集和真超集

    • A是B的子集,切A不等于B,A就是B的真子集,B是A的真超集

    并集

    • 多个集合合并的结果

    交集

    • 多个集合的公共部分

    差集

    • 集合中除去和其他集合的公共部分

    集合运算

    并集

    • 将两个集合A和B的所有元素合并在一起,组成的集合称作集合A与集合B的并集
    • union(*others) 返回和多个元素合并后的新集合
    • | 运算符重载  等同union
    • update(*others) 和多个集合合并,就地修改
    • |= 等同update

    交集

    • 集合A和集合B,由所有属于A且属于B的元素组成的集合
    • intersection(*others)  返回和多个集合的并集
    • & 等同于intersection
    • intersection_update(*others) 获取和多个集合的交集,并就地修改
    • &= 等同于intersection_update

    差集

    • 集合A和B,由所有属于A切不属于B的元素组成的元素
    • difference(*other) 返回和多个集合的差集
    • - 等同于difference
    • difference_update(*other)  获取和多个集合的差集并就地修改
    • -= 等同于difference_update

    对称差集

    • 集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B) U (B-A)
    • symmetric_difference(other) 返回和另一个集合的差集
    • ^ 等同于symmetric_difference
    • symmetric_difference_update(other) 获取和另一个集合的差集就地修改
    • ^= 等同于symmetric_difference_update

    issubset(other)、<=

    • 判断当前集合是否是另一个集合的子集

    set1 < set2

    • 判断set1是否是set2的真子集

    issuperset(other)、>=

    • 判断当前集合是否是other的超集

    set1 > set2

    • 判断set1是否是set的真超集

    isdisjoint(other)

    • 当前集合和另一个集合没有交集
    • 没有交集、返回True

    集合应用

    1、共同好友

    你的好友A、B、C,他的好友B、C、D,求共同好友

    {"A","B","C"}.intersection({"B","C","D"})

    2、微信群提醒

    XXX与群里的其他人都不是微信朋友关系

    • 并集,所有的群里的人的好友形成一个并集,userid in (A|B|C|...) ,用户id不存在这个并集中,说明他和任何人都不是朋友

    3、权限判断

    有一个API,要求权限同时具备A、B、C才能访问,用户权限是B、C、D,判断用户是否能访问该API

    • API集合A,权限集合P
    • A - P = {} , A-P为空集,说明P包含A
    • A.issubset(P) 也行,A是P的子集也行
    • A & P = A 也行

    有一个API,要求权限具备A、B、C任意一项就可以访问,用户权限B、C、D,判断用户是否能访问该API

    • API集合A,权限集合P
    • A & P != {} 就可以
    • A.isdisjoint(P) == False 表示有交集

    4、一个总任务列表,存储所有任务。一个完成的任务列表。找出为未完成的任务

    • 业务中,任务ID一般不可以重复
    • 所有已完成任务ID放到一个set中,假设为COMPLETED,它是ALL的子集
    • ALL - COMPLETED = UNCOMPLETED

    集合练习

    随机产生2组各10个数字的列表,如下要求:

    • 每个数字取值范围[10,20]
    • 统计20个数字中,一共有多少个不同的数字  #交集
    • 2组之间进行比较,不重复的数字有几个?分别是什么?  #对称差集
    • 2组之间进行比较,重复的数字有几个?分别是什么?  #并集
    a = [1, 9, 7, 5, 6, 7, 8, 8, 2, 6] 
    b = [1, 9, 0, 5, 6, 4, 8, 3, 2, 3] 
    s1 = set(a)
    s2 = set(b)
    print(s1) #去重
    print(s2) #去重
    print(s1.union(s2)) #并集 去重
    print(s1.symmetric_difference(s2))  #对称差集
    print(s1.intersection(s2))   #交集
  • 相关阅读:
    极客技术专题【011期】:EasyUI初级教程
    帮助自定义选择框样式的Javascript
    利用HTML5与jQuery技术创建一个简单的自动表单完成
    30个iPhone健康应用帮助你保持身体健康
    如何构建下拉滑动式响应导航菜单
    推荐十款来自极客标签的超棒前端特效[第十三期]
    重新设计网站的10点建议
    创建CSS3警示框渐变动画
    17种新型的响应式开发框架
    使用jQuery创建模态窗口登陆效果
  • 原文地址:https://www.cnblogs.com/xzkzzz/p/11197518.html
Copyright © 2011-2022 走看看