collections 模块----Python标准库,是数据结构常用模块


常用类型有:


  计数器(Counter)   dict的子类,计算可hash的对象;


  双端队列(deque)  类似于list的容器,可以快速的在队列头部和尾部添加、删除元素;


  默认字典(defaultdict)  dict的子类,可以调用提供默认值的函数;


  有序字典(OrderedDict)  dict的子类,可以记住元素的添加顺序;


  可命名元组(namedtuple)  可以创建包含名称的tuple;


 1 #获取元素个数,返回字典
2
3 >>> from collections import Counter
4 >>> str='12312312312'
5 >>> Counter(str)
6 Counter({'1': 4, '2': 4, '3': 3})
7 >>> dict(Counter(str))
8 {'1': 4, '2': 4, '3': 3}
9 >>> l = [1,2,3,4,5]
10 >>> Counter(l)
11 Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1})
12 >>> d={'d':4,'e':2,'c':7}
13 >>> Counter(d)
14 Counter({'c': 7, 'd': 4, 'e': 2})

most_common(),返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列;
>>> Counter('what do you think you are good').most_common(3)
[(' ', 6), ('o', 5), ('h', 2)]

subtract(),从一个可迭代对象中或者另一个映射(或counter)中,元素相减,类似于dict.update(),但是subtracts 数目而不是替换它们,输入和输出都有可能为0或者为负;

而update() 为相加

>>> c=Counter({'a':3,'b':4,'c':1,'d':-2})
>>> d=Counter({'a':1,'b':2,'c':3,'d':4})
>>> c.substract(d)
>>> c
Counter({'a': 2, 'b': 2, 'c': -2, 'd': -6})

namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。


# 命名元组
# from collections import namedtuple
#
# p = namedtuple('point', ['x', 'y'])
# p1 = p(4,3)
# p2 = p(3,4)
# print(p1.x)
# print(p2.y)
# print(p(4,3)) # 双端队列
deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。

大部分列表的方法在这里也适用

 
# from collections import deque
# l = [1,2]
# dq = deque(l)
# dq.append(3)  # 将3添加到dq的右侧;
# dq.appendleft(0) # 添加到左侧
# dq.insert(4,5)
# print(dq.pop()) # 移除和返回deque中最右侧的元素
# print(dq.popleft()) # 移除和返回deque中最左侧的元素,
# print(dq)
# dq.clear() # 清零,元素长度为0
# dq.count(2) # 返回元素的个数

# # 有序的字典
# from collections import OrderedDict
#
# od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# print(od)
# print(od['b'])
# for i in od.items():
# print(i)
defaultdict
使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。


# 默认字典 # from collections import defaultdict
# d = defaultdict(lambda : 0)
# print(d['a']) # 没有a这个键,返回0

标准库之collections的更多相关文章

  1. Python3标准库:collections容器数据类型

    1. collections容器数据类型 collections模块包含除内置类型list.dict和tuple以外的其他容器数据类型. 1.1 ChainMap搜索多个字典 ChainMap类管理一 ...

  2. python标准库:collections和heapq模块

    http://blog.csdn.net/pipisorry/article/details/46947833 python额外的数据类型.collections模块和heapq模块的主要内容. 集合 ...

  3. python标准库之collections介绍

    collections----容器数据类型 collections模块包含了除list.dict.和tuple之外的容器数据类型,如counter.defaultdict.deque.namedtup ...

  4. 【python】Python标准库defaultdict模块

    来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...

  5. collections标准库

    collections标准库 之前Python的第三方库用的一直很舒服,现在突然发现标准库也有collections这样的神器,可以补充list.set.dict以外的应用 1. namedtuple ...

  6. Python标准库——collections模块的Counter类

    1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...

  7. python学习笔记系列----(八)python常用的标准库

    终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...

  8. 【循序渐进学Python】11.常用标准库

    安装完Python之后,我们也同时获得了强大的Python标准库,通过使用这些标准库可以为我们节省大量的时间.这里是一些常用标准库的简单说明.更多的标准库的说明,可以参考Python文档 sys 模块 ...

  9. Python标准库映射类型与可散列数据类型的关系

    这里有两个概念似懂非懂,在这里明确一下: 映射类型: Python>3.2中,collections.abc模块有Mapping和MutableMapping两个抽象基类(Python2.6~3 ...

随机推荐

  1. [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构

    [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 目录 [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x0 ...

  2. 全球首个优秀的华人.net微服务框架 作者:百大僧

    话不多说,直接上地址 https://gitee.com/shoubashou/NetCoreMicroService,目标斩获10000star, 通往牛逼的路上,风景差得让人只说脏话. 是全球首个 ...

  3. 集合与map

  4. 技术选型:为什么批处理我们却选择了Flink

    最近接手了一个改造多平台日志服务的需求,经过梳理,我认为之前服务在设计上存在缺陷.经过一段时间的技术方案调研,最终我们决定选择使用 Flink 重构该服务. 目前重构后的服务已成功经受了国庆节流量洪峰 ...

  5. 设计模式:策略模式(根据参数,调用不同的service接口)

    1.定义类容器providers,当spring加载时@PostConstruct(类似构造方法),会先执行init() : 在init()中,反射"cn.jdk18"的所有带自定 ...

  6. SQL Server 列存储索引概述

    第一次接触ColumnStore是在2017年,数据库环境是SQL Server 2012,Microsoft开始在SQL Server 2012中推广列存储索引,到现在的SQL Server 201 ...

  7. CodeForces 1067E Random Forest Rank

    题意 给定一棵 \(n\) 个节点的树,每条边有 \(\frac{1}{2}\) 的概率出现,这样会得出一个森林,求这个森林的邻接矩阵 \(A\) 的秩 \(\operatorname{rank} A ...

  8. Java学习的第四十二天

    1.例4.7弦截法求方程f(x)=x^3-5x^2+16x-80=0的根 import java.util.Scanner; import java.lang.*; public class cjav ...

  9. 微服务通信之ribbon实现原理

    前言 上一篇我们知道了feign调用实现负载均衡是通过集成ribbon实现的.也较为详细的了解到了集成的过程.现在我们看一下ribbo是如何实现负载均衡的.写到这里我尚未去阅读源代码,我在这里盲猜一下 ...

  10. 设计Twitter 时间线

    「design Twitter」是 LeetCode 上第 335 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家 ...