zoukankan      html  css  js  c++  java
  • Python常用模块--collections

    collections是Python中一个非常强大的容器数据模块。

    1.创建升级版的元组--namedtupe

    Python的元组(1,2,3)具有不可变性,但是单独的元组在无法满足现有需求时,可以使用升级版的元组,使用namedtupe可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    __author__ = "问道编程"
    __date__ = "2019/03/18 12:37"

    from collections import namedtuple

    Point = namedtuple('Ponit', ['x', 'y']) # 实例化一个tupe对象,并规定了对象数量以及属性:x、y
    p = Point(1,3) # 赋值
    print(p.x) # 通过属性访问数据
    print(p.y)

    2.创建升级版的列表--deque

    使用list存储数据时,可以非常方便的进行查询和尾部操作(append、pop),但是在头部添加、删除时效率很低(最大时间复杂度为n),所以有了deque,可以实现高效的头、尾的操作,适合用于队列和栈:

    from collections import deque

    q = deque([1,2,3])
    q.append(6) # [1,2,3,6] 同list一样进行尾部添加、删除操作
    q.pop() # [1,2,3]
    q.appendleft('x') # ['x',1,2,3] 头部添加
    q.popleft() # [1,2,3] 头部删除

    3.创建升级版字典--defaultdict

    常用的dict使用键值对存储数据,但当使用key访问匹配的值,而key不存在时会报错,而使用defaultdict可以规定一个默认值,当使用不存在的key查询字典的值时,会返回一个指定的默认值:

    from collections import defaultdict

    d = defaultdict(lambda: 'N/A') # 创建defaultdict对象,是字典类型的子集,并规矩默认值是 N/A
    d['a'] = 1
    print(d['a']) # 1 正常输出
    print(d['b']) # N/A key不存在时,输出默认值

    4.创建有顺序的字典--OrderedDict

    常用的dict是不记录键值对顺序的,使用OrderedDict可以创建相对有序的字典,该类型可记录字典的输入顺序,但不能自动进行排序:

    from collections import OrderedDict

    d = OrderedDict()
    d['a'] = 1
    d['b'] = 2

    print(d.keys()) # ['a','b'] 会按照key值的录入顺序进行打印

    5.创建多个字典的映射--ChainMap

    官方解释:一个 ChainMap 类是为了将多个映射快速的链接到一起,这样它们就可以作为一个单元处理。它通常比创建一个新字典和多次调用 update() 要快很多。

    通俗的说,是创建一将多个字典链接到一起的映射,底层通过list实现,查询时,从第一个字典映射开始查,如果第一个字典没有,查询第二个,依次类推,但是更新、删除数据时仅对于第一个字典映射操作。

    通常在进行拼接命令行时,可以对参数进行优先选择,比如用户输入数据、环境传入、默认值。

    参考:https://docs.python.org/zh-cn/3/library/collections.html

    6.功能强大的列表计数功能--Counter

    from collections import Counter

    arr = [1,2,3,3,3,6,2,2,2] # 1出现1次,2出现4次,3出现3次,6出现1次
    print(arr.count(3)) # 3 可以使用list的count方法获取指定值的出现次数
    cou = Counter(arr)
    pirnt(cou) # Counter({3: 3, 2: 2, 1: 1, 5: 1, 6: 1}) 属于字典的子集

    for k,v in cou.items():
    print(k,v) # 对Counter进行遍历,打印结果
    print(cou.most_common(2)) # [(3,3),(2,2)]  返回出现次数最高的前两个数字及次数
  • 相关阅读:
    大型网站数据库架构分析
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    设计模式培训之一:为什么要用单例模式?
    架构师成长之路
    hdoj1257 最少拦截系统
    hdoj2571 命运
    hdoj1010 Temperor of the bone
    hdoj1175 连连看
    ny220 推桌子
    ny168 房间安排
  • 原文地址:https://www.cnblogs.com/wendaobiancheng/p/10553383.html
Copyright © 2011-2022 走看看