python 序列 字典

序列类型

python 是基于协议的,只要实现了相应方法就是相应的类型。(类似golang的interface)

  1. 容器序列 list tuple deque
    其中可放任意类型
  2. 扁平序列 str bytes bytearray array.array
    内容类型相同
  3. 可变序列 list deque bytearray array
  4. 不可变 str tuple bytes

序列 abc 继承

collections.abc中 Sequence、MutableSequence(基于前者) 为 可变序列、不可变序列
可通过查看原文件确认实现这些类型需要实现哪些协议

实现可切片对象

Sequence需要实现 __getitiem__
MutableSequence需要实现 __setitiem__ __delitiem__ __insert__

class Group(object):
      def __init__(self, *args):
            pass
      
      def __getitiem__(self, index):
            pass

      def __len__(self):
            pass

# Group 就可以当序列使用

bisect

用来处理已排序的序列,维持排序,升序
使用二分查找

ls = []
bisect.insort(ls, 2)
bisect.insort(ls, 4)
bisect.insort(ls, 3)
bisect.insort(ls, 1)
bisect.insort(ls, 5)
# 插入时时刻维持排序
bisect.bisect(ls, 3) # 输出该插入的位置

字典、集合类型

实现collections.abc下的MutableMaping即为字典类
不能继承重写list dict等用c语言实现的类型
如果要继承字典类,则继承collections.UserDict

collections.defaultDict中给字典一个默认值

my_dict = defaultdict(None)
val = my_dict["key"]      # 获得None而不是keyError

set fronzenset

set 内部无序
fronzenset 为不可变值,可以作为dict的键

dict、set的查找时间远远低于list
随着数据量的增大,list查找消耗的时间也增大。但dict不会。

实现原理为哈希表。创建dict时申请的是连续空间。
一个实现了__hash__的类就是可哈希对象
dict内存花销大,因为哈希表内部有空闲单元。自定义对象或python内部对象都是用dict包装的

posted @ 2021-01-18 20:51  某某人8265  阅读(91)  评论(0编辑  收藏  举报