zoukankan      html  css  js  c++  java
  • 被我忽略许久的set

    心塞,set一直是我忽略的一个数据结构

    1.生成一个set:
    1) set(iterable)
    传入一个可以迭代的数据结构:
    eg:字符串;元组;列表,字典
    2) {v1,v2,.......,vn}
    注意:vi必须是可以哈希的:
    你问我啥叫哈希.额,你就知道就是不能变的就好了,剩下的问题问度娘
    或者参考http://www.cnblogs.com/chenzhaosu/articles/3506790.html
    3) 创建一个空set
    set()
    2.set的特点:
    1)无序
    2)不重复
    3)可变
    3.方法
    add() difference_update()
    clear() discard()
    copy() intersection() >
    difference() intersection_update()
    'add',
    'clear',
    'copy',
    'difference',
    'difference_update',
    'discard',
    'intersection',
    'intersection_update',
    'isdisjoint',
    'issubset',
    'issuperset',
    'pop',
    'remove',
    'symmetric_difference',
    'symmetric_difference_update',
    'union',
    'update'

    1)查:
    无序啊,怎么查.遍历吧
    2)增:
    add()
    eg:
    In [3]: a
    Out[3]: {'e', 'h', 'l', 'o'}

    In [4]: a.add("kkkk")

    In [5]: a
    Out[5]: {'e', 'h', 'kkkk', 'l', 'o'}
    update()
    eg:
    In [7]: a.update("world")

    In [8]: a
    Out[8]: {'d', 'e', 'h', 'kkkk', 'l', 'o', 'r', 'w'}
    3)删:
    pop()
    eg:
    In [9]: a.pop()
    Out[9]: 'e'
    remove()
    eg:
    In [13]: a
    Out[13]: {'d', 'kkkk', 'l', 'o', 'r', 'w'}

    In [14]: a.remove("kkkk")

    In [15]: a
    Out[15]: {'d', 'l', 'o', 'r', 'w'}
    4应用:
    两个应用场景,1)去重,2)关系测试(数学里面的集合关系)
    1)去重
    eg:
    l = [1,2,3,4,1,2,5,6]
    得到不重复的列表:
    In [16]: l = [1,2,3,4,1,2,5,6]

    In [17]: l_new=list(set(l))

    In [18]: l_new
    Out[18]: [1, 2, 3, 4, 5, 6]
    2)关系测试(可以参考数学上的集合关系)
    eg:
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}

    a)取并集
    In [22]: set1.union(set2)
    Out[22]: {1, 2, 3, 4, 5, 6, 7, 8}

    In [24]: set1 |set2
    Out[24]: {1, 2, 3, 4, 5, 6, 7, 8}
    b)取交集
    In [25]: set1.intersection(set2)
    Out[25]: {4, 5}

    In [26]: set1 &set2
    Out[26]: {4, 5}
    c)取差集
    ①)在set1中不在set2中
    In [27]: set1.difference(set2)
    Out[27]: {1, 2, 3}

    In [28]: set1-set2
    Out[28]: {1, 2, 3}

    ②)在set2中不在set1中
    In [29]: set2.difference(set1)
    Out[29]: {6, 7, 8}

    In [30]: set2-set1
    Out[30]: {6, 7, 8}
    d)(set1 U set2)-(set1 n set2)
    In [31]: set1.symmetric_difference(set2)
    Out[31]: {1, 2, 3, 6, 7, 8}

    In [32]: set1^set2
    Out[32]: {1, 2, 3, 6, 7, 8}

    注: ^ 为数字6上的符号
    e)子集,超级
    eg:
    In [33]: s1={1,2,3}

    In [34]: s2={1,2}

    In [42]: s2.issubset(s1)
    Out[42]: True
    自己是本身的子集
    In [45]: s1.issuperset(s2)
    Out[45]: True

    In [46]: s1.issuperset(s1)
    Out[46]: True

    In [47]: s1<s2
    Out[47]: False

    In [48]: s1>s2
    Out[48]: True

    In [49]: s1<s1
    Out[49]: False

    In [50]: s1>s1
    Out[50]: False
    注意:使用符号的表示的时候严格小于和大于
    In [51]: s1>=s1
    Out[51]: True

  • 相关阅读:
    matplotlib直方图绘图并且标注数字
    爬虫最基础知识串行和异步进阶代码
    卡方检验
    德国VoIP 系统中发现秘密后门
    python 处理字典键值合并
    python 读取json大文件
    上下文管理器的使用
    服务端高并发分布式架构
    上下文管理器连接数据库示例
    上下文管理器
  • 原文地址:https://www.cnblogs.com/twotigers/p/7698652.html
Copyright © 2011-2022 走看看