美文网首页
set ,dictionary

set ,dictionary

作者: 秋幻旎苏 | 来源:发表于2018-08-15 21:26 被阅读0次

    一.set

    • 可变的,无序的,不重复的元素的集合
    • set 里面的元素必须可以hash
    • set 可以迭代
    • set 不可以索引
    • set查看元素时间复杂度是O(1)

    1.set 初始化

    • set()
    • set(iterable)

    2. set 常用方法

    ①add(elem)
    • 增加一个元素到set中,如果元素存在,则不操作
    ②update(*others)
    • 合并其他元素到set集合中
    • 必须是可迭代对象
    • 就地修改,返回None
    ③remove(elem)
    • 从set中移除一个元素
    • 如果元素不存在,则抛出KeyError异常
    ④discard(elem)
    • 从set中移除一个元素,如果元素不存在,则不操作
    ⑤pop() -> item
    • 移除随机的元素,并返回
    • 空集返回keyError 异常
    ⑥clear()
    • 移除所有元素
    ⑦ in
    • in 和 not in 判断元素是否在set中
    • 遍历 set

    3.集合运算

    集合概念
    • 全集:所有元素的集合。例如实数集,所有实数组成的集合就是全集
    • 真子集和真超集:A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
    • 并集:多个集合合并的结果
    • 交集:多个集合的公共部分
    • 差集:集合中除去和其他集合的公共部分
    python 符号 含义 python方法 返回
    - 差集 difference(*others) 新集合
    -= 差集 difference_update(*others) None
    & 交集 intersection(*others) 新集合
    &= 交集 intersection_update(*others) None
    | 合集,并集 union(*others) 新集合
    = 合集,并集 union(*others None
    ^ 对称差集 symmetric_differece(other) 新集合
    ^= 对称差集 symmetric_differece_update(other) None

    4.集合判断

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

    二.字典

    • key-value 键值对的数据的集合
    • 可变的,无序的,key是唯一的
    • key 一定是可以hash 的元素

    1.dict 初始化

    • d = dict() ,d = {}
    • dict(**kwargs) 使用name=value对 初始化一个字典
      1.使用数字作为key 的时候不可以使用name=value对,会出现报错SyntaxError: keyword can't be an expression
      2.最好使用d = {1:'x',2:'y'} 构建或者二元结构等等其他方式。
    • dict(iterable,**kwarg)使用可迭代对象 和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构。
    • dict(mapping,**kwarg) 使用一个字典构建另一个字典
      注意引用类型
    • 类方法dict.fromkeys(iterable,value)


      dict.gif

    2. dict常用方法

    ①查询字典元素
    • d[key]
      返回key对应的值,不存在则抛出KeyError异常
    • get(key,[default])
      如果key存在返回对应的值,不存在则返回缺省值,缺省值默认是None
    • setdefault(key,[default])
      如果key存在返回对应的值,不存在,添加key-value对,value设置为default,并且返回default,如果defalut没有设置,缺省值为None
    ②增加和修改字典元素
    • d[key] = value
      1.如果key存在,则修改该key对应的value。
      2.如果不存在, 则添加新的kv对
    • update([other]) -> None
      1.使用另一个字典的kv对更新本字典
      2.key不存在,就添加
      3.key存在,覆盖已经存在的key对应的值
      4.就地修改


      d.update.gif
    ③删除字典的元素
    • pop[key,[default])
      1.key存在,移除该kv对,并且返回对应的value
      2.key不存在,default 没有定义,会报错KeyError 的异常

      1. key不存在,defualt存在,则返回指定的default的值
    • popitem()
      1.随机移除任意一个kv对,并且返回该kv对组成的元组。
      2.如果是空字典,则会抛出KeyError的异常

    • clear() 清空字典

    ④字典遍历
    • 遍历key
      for ... in d
      for ... in d.keys()
    • 遍历value
      for ... in d.values()
    • 遍历 key-value
      for item in d.items()
      for k,v in d.items()
    • 字典在for 循环的时候不能改变字典
    • 字典遍历总结
    1. python3 中,keys,values,items 方法返回一个类似生成器的可迭代对象,不会把函数的返回结果复制到内存中。
    2. dictionary view对象,可以使用len(),iter(),in 操作。
    3. 字典的entry的动态的视图,字典变化,视图将反映处这些变化。
    4. keys 返回一个类set对象,也可以看作是一个set集合,如果values都可以hash,那么items也可以看作是类set对象
    5. 在python2中,上面的方法会返回一个新的列表,开辟新的内存空间,所以python2 中建议使用iterkeys,itervalues,iteritems版本,返回一个迭代器,而不是返回一个copy

    3. 默认字典

    • defaultidict([default_factory[,...]])
      default_factory 缺省是None,它提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value
    from collections import defaultdict
    d1 = defaultdict(list)
    for k in 'abc':
        for i in range(3):
            d1[k].append(i)
    print(d1)
    #defaultdict(<class 'list'>, {'a': [0, 1, 2], 'b': [0, 1, 2], 'c': [0, 1, 2]})
    

    4. 有序字典

    • collections.OrderedDict([items])
      1.可以记录key加入字典的顺序,打印的时候也按照这个顺序输出打印
    from collections import OrderedDict
    import random
    d = dict(banana=3,apple=4,pear=1,orange=2)
    print(d)
    # {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
    keys = list(d.keys())
    random.shuffle(keys)
    print(keys)
    #['orange', 'banana', 'apple', 'pear']
    od = OrderedDict()
    for key in keys:
        od[key] = d[key]
    print(od)
    #OrderedDict([('orange', 2), ('apple', 4), ('pear', 1), ('banana', 3)])
    print(od.keys())
    #odict_keys(['apple', 'orange', 'banana', 'pear'])
    

    python3.6 的字典就是记录key的插入的顺序(IPython不一定有效果)

    应用场景:

    1. 加入使用字典记录了N个产品,这些产品使用ID由小到大加入字典中。
    2. 除了使用字典检索的遍历,有时候需要取出ID,但是希望是按照输入的顺序,因为输入顺序是有序的
    3. 否则还需要重新遍历到值排序

    相关文章

      网友评论

          本文标题:set ,dictionary

          本文链接:https://www.haomeiwen.com/subject/bxaibftx.html