当前位置 : 主页 > 编程语言 > java >

使用python collections模块中提供的数据结构

来源:互联网 收集:自由互联 发布时间:2022-06-23
python内置的基本数据结构有以下几种 list tuple set dict 这些基础的数据结构已经能够满足开发中的大多数需求,但是针对某些特殊场景,用基本的数据结构来实现,还是不够简便。为此,

python内置的基本数据结构有以下几种

  • list
  • tuple
  • set
  • dict
  • 这些基础的数据结构已经能够满足开发中的大多数需求,但是针对某些特殊场景,用基本的数据结构来实现,还是不够简便。为此,python内置了collections模块,在基本数据结构的基础上进行了扩展,提出了以下几种更具针对性的数据结构

    1. Counter

    Counter用于对元素进行计数,用法如下

    >>> from collections import Counter
    >>> Counter([1, 2, 3, 2, 2, 1])
    Counter({2: 3, 1: 2, 3: 1})
    >>> a = Counter([1, 2, 3, 2, 2, 1])
    # 类似字典的访问方式
    >>> a[2]
    3
    >>> a[1]
    2
    >>> a[3]
    1

    利用Counter,可以方便的提取topN的元素,用法如下

    # 提取出现次数最多的两个元素
    >>> a.most_common(2)
    [(2, 3), (1, 2)]
    # 提取出现次数最少的元素
    >>> a.most_common()[-1]
    (3, 1)

    2. namedtuple

    nameedtuple称之为命名元组,相当于为每个元素添加一个name属性,增加了代码的可读性,可以通过name来访问对应的元素,用法如下



    >>> from collections import namedtuple
    >>> info = namedtuple('info', ['name', 'age'])
    >>> info('Andy', 22)
    info(name='Andy', age=22)
    >>> a = info('Andy', 22)
    >>> a
    info(name='Andy', age=22)
    >>> a.name
    'Andy'
    >>> a.age
    22
    >>> a[0]
    'Andy'
    >>> a[1]
    22

    3. deque

    deque是一个双向的队列,可以快速的在头部和尾部添加元素,用法如下


    >>> from collections import deque
    >>> a = deque([1, 2, 3, 4])
    # 右侧添加一个元素
    >>> a.append(5)
    >>> a
    deque([1, 2, 3, 4, 5])
    # 左侧添加一个元素
    >>> a.appendleft(0)
    >>> a
    deque([0, 1, 2, 3, 4, 5])
    # 右侧删除一个元素
    >>> a.pop()
    5
    >>> a
    deque([0, 1, 2, 3, 4])
    # 左侧删除一个元素
    >>> a.popleft()
    0
    >>> a
    deque([1, 2, 3, 4])
    # 右侧添加多个元素
    >>> a.extend([5,6])
    >>> a
    deque([1, 2, 3, 4, 5, 6])
    # 左侧添加多个元素
    >>> a.extendleft([-1,0])
    >>> a
    deque([0, -1, 1, 2, 3, 4, 5, 6])
    # 在指定的下标处,插入元素
    >>> a.insert(1, 'x')
    >>> a
    deque([0, 'x', -1, 1, 2, 3, 4, 5, 6])
    # 删除指定的元素
    >>> a.remove('x')
    >>> a
    deque([0, -1, 1, 2, 3, 4, 5, 6])
    # 查找特定元素,返回下标
    >>> a.index(2)
    3
    # 将队列逆序排列
    >>> a.reverse()
    >>> a
    deque([6, 5, 4, 3, 2, 1, -1, 0])
    # 统计指定元素出现的次数
    >>> a.count(4)
    1
    # 清空队列
    >>> a.clear()
    >>> a
    deque([])

    4. defaultdict

    内置dict是没有默认值的,对于某个key,必须先定义其value之后才可以访问,最典型的就是计数

    # key不存在,直接对其值进行加1操作,会报错
    >>> a = dict()
    >>> a['a'] += 1
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    KeyError: 'a'
    >>>
    # 先声明一个值,再进行加1 操作,正常执行
    >>>
    >>> a['a'] = 0
    >>> a['a'] += 1
    >>> a['a']
    1

    每次声明默认值很麻烦,defaultdict的作用就是在声明dict时就设置value的默认值,经典的使用场景如下


    # 创建值为列表的字典
    # 表明value的默认值为list
    >>> from collections import defaultdict
    >>> a = defaultdict(list)
    >>> num = [1, 2, 3, 4, 5]
    >>> for i in num:
    ... a['one'].append(i)
    ...
    >>>
    >>> a
    defaultdict(<class 'list'>, {'one': [1, 2, 3, 4, 5]})


    # 创建双层字典
    # 命名value的默认值为dict
    >>> a = defaultdict(dict)
    >>> a['one']['tow'] = 1
    >>> a['one']['three'] = 2
    >>> a
    defaultdict(<class 'dict'>, {'one': {'tow': 1, 'three': 2}})

    5. OrderedDcit

    在python3.7版本以前,字典key的顺序是乱序的,OrderedDcit的作用就是按照key插入的顺序来遍历字典,用法如下


    # python 3.5
    # key 乱序
    >>> info = dict([('Andy', 24), ('John', 26), ('Rose', 22)])
    >>> for key in info:
    ... print('name: {} age: {}'.format(key, info[key]))
    ...
    name: John age: 26
    name: Andy age: 24
    name: Rose age: 22


    # OrderedDict
    # 按照key插入的顺序
    >>> order_info = collections.OrderedDict([('Andy', 24), ('John', 26), ('Rose', 22)])
    >>> for key in order_info:
    ... print('name: {} age: {}'.format(key, info[key]))
    ...
    name: Andy age: 24
    name: John age: 26
    name: Rose age: 22

    在python3.7之后,内置的dict默认就是按照key插入的顺序来记录的,不需要在借助OrderedDcit来实现上述操作了。

    ·end·


    使用python collections模块中提供的数据结构_默认值

    一个只分享干货的

    生信公众号







    上一篇:python日期和时间的操作方法汇总
    下一篇:没有了
    网友评论