`
唐美好
  • 浏览: 44898 次
  • 性别: Icon_minigender_1
  • 来自: 湖南永州
社区版块
存档分类
最新评论

Python collections模块实例讲解

阅读更多
Python collections模块实例讲解_python_脚本之家

Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块。比如今天想给大家 介绍的 collections 就是一个非常好的例子
collections模块基本介绍
我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:

  • 1.namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
  • 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
  • 3.Counter: 计数器,主要用来计数
  • 4.OrderedDict: 有序字典
  • 5.defaultdict: 带有默认值的字典

namedtuple()
namedtuple主要用来产生可以使用名称来访问元素的数据对象,通常用来增强代码的可读性, 在访问一些tuple类型的数据时尤其好用。
举个例子:
复制代码 代码如下:

# -*- coding: utf-8 -*-
"""
比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。
使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构。
"""
from collections import namedtuple
websites = [
('Sohu', 'http://www.google.com/', u'张朝阳'),
('Sina', 'http://www.sina.com.cn/', u'王志东'),
('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
website = Website._make(website)
print website
# Result:
Website(name='Sohu', url='http://www.google.com/', founder=u'\u5f20\u671d\u9633')
Website(name='Sina', url='http://www.sina.com.cn/', founder=u'\u738b\u5fd7\u4e1c')
Website(name='163', url='http://www.163.com/', founder=u'\u4e01\u78ca')

deque
deque其实是 double-ended queue 的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象: .popleft(), .appendleft() 。
你可能会说,原生的list也可以从头部添加和取出对象啊?就像这样:
复制代码 代码如下:


[color=red]l.insert(0, v)
l.pop(0)

但是值得注意的是,list对象的这两种用法的时间复杂度是 O(n) ,也就是说随着元素数量的增加耗时呈 线性上升。而使用deque对象则是 O(1) 的复杂度,所以当你的代码有这样的需求的时候, 一定要记得使用deque。
作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate 等。
举个栗子
复制代码 代码如下:

# -*- coding: utf-8 -*-
"""
下面这个是一个有趣的例子,主要使用了deque的rotate方法来实现了一个无限循环
的加载动画
[/color]

"""
import sys
import time
from collections import deque
fancy_loading = deque('>--------------------')
while True:
print '\r%s' % ''.join(fancy_loading),
fancy_loading.rotate(1)
sys.stdout.flush()
time.sleep(0.08)
# Result:
# 一个无尽循环的跑马灯
------------->-------



Counter
计数器是一个非常常用的功能需求,collections也贴心的为你提供了这个功能。
举个栗子
复制代码 代码如下:

# -*- coding: utf-8 -*-
"""
下面这个例子就是使用Counter模块统计一段句子里面所有字符出现次数
"""
from collections import Counter
s = '''A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'''.lower()
c = Counter(s)
# 获取出现频率最高的5个字符
print c.most_common(5)
# Result:
[(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]


OrderedDict

在Python中,dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了。
举个栗子
复制代码 代码如下:

# -*- coding: utf-8 -*-
from collections import OrderedDict
items = (
('A', 1),
('B', 2),
('C', 3)
)
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
print 'Regular Dict:'
for k, v in regular_dict.items():
print k, v
print 'Ordered Dict:'
for k, v in ordered_dict.items():
print k, v
# Result:
Regular Dict:
A 1
C 3
B 2
Ordered Dict:
A 1
B 2
C 3

defaultdict
我们都知道,在使用Python原生的数据结构dict的时候,如果用 d[key] 这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。
但是,如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。
复制代码 代码如下:

# -*- coding: utf-8 -*-
from collections import defaultdict
members = [
# Age, name
['male', 'John'],
['male', 'Jack'],
['female', 'Lily'],
['male', 'Pony'],
['female', 'Lucy'],
]
result = defaultdict(list)
for sex, name in members:
result[sex].append(name)
print result
# Result:
defaultdict(<type 'list'>, {'male': ['John', 'Jack', 'Pony'], 'female': ['Lily', 'Lucy']})


参考资料
上面只是非常简单的介绍了一下collections模块的主要内容,主要目的就是当你碰到适合使用 它们的场所时,能够记起并使用它们,起到事半功倍的效果。
如果要对它们有一个更全面和深入了解的话,还是建议阅读官方文档和模块源码。
https://docs.python.org/2/library/collections.html#module-collections
来源于脚本之家:http://www.jb51.net/article/48771.htm
分享到:
评论

相关推荐

    python3 标准模块实例学习 原版

    8. `collections`模块:提供了许多高级数据结构,如有序字典、命名元组等,增强了Python内置数据结构的功能。 9. `threading`模块:实现了线程,用于多线程编程,提高程序执行效率。 10. `unittest`模块:提供了一...

    Python超级实用小案例(最全讲解)

    此外,Python还提供了collections模块,其中包括Counter(计数器)、namedtuple(命名元组)和defaultdict(默认字典)等高级数据结构,以及heapq模块,用于堆操作。 【Python绘图】 Python的绘图能力非常强大,如...

    python知识点讲解

    - 标准库模块,如argparse、base64、collections、datetime、hashlib和hmac等; - 第三方模块,如celery和click的介绍。 书中还特别提到了一些Python的主要使用者和贡献者,包括YouTube、Pinterest以及中国的豆瓣和...

    举例讲解Python常用模块

    ### Python 常用模块详解 #### 一、datetime 模块 `datetime` 模块主要用于处理日期和时间相关的操作。它提供了多种类来帮助我们处理日期和时间。 ##### 1.1 datetime 类 - **`datetime.now()`**:获取当前的...

    廖雪峰的Python 3教程——排版完美

    常用内建模块部分介绍了datetime、collections、base64、struct、hashlib、itertools、contextlib等模块的使用方法。 网络编程和Web开发是Python应用的热点领域,这部分内容中,教程从TCP/IP协议讲起,到TCP和UDP...

    Python学习手册.mobi kindle电子书 带源码

    7. **数据结构高级应用**:可能涉及复杂数据结构如堆栈、队列、树和图的实现,以及如何使用Python的collections模块中的高级容器。 8. **函数式编程**:讲解Python中的函数式编程特性,如高阶函数、闭包、map、...

    Python标准库使用OrderedDict类的实例讲解

    ### Python标准库使用OrderedDict类的实例讲解 在Python中,`OrderedDict`是一个非常有用的容器类型,它属于`collections`模块的一部分。与普通的字典相比,`OrderedDict`能够保持元素插入时的顺序,这对于那些需要...

    python基础教程:Python标准库使用OrderedDict类的实例讲解

    在Python编程语言中,`OrderedDict`是标准库`collections`模块中的一个数据结构,它扩展了普通字典(dict)的功能,保持了元素插入的原始顺序。这与普通的无序字典不同,无序字典无法保证元素的顺序。在Python 3.7及...

    288页Python核心知识手册

    - **collections模块**:提供了一些容器数据类型。 - **第三方库**:介绍常用的第三方库及其用途,例如: - **Celery**:异步任务队列。 - **Click**:命令行接口创建工具。 - **Requests**:用于发送HTTP请求...

    python中count函数简单的实例讲解

    此外,Python的`collections`模块中的`Counter`类提供了一个更高级的功能,可以统计各种元素的出现次数,并生成一个字典,这在处理大量数据时非常有用。 总之,Python的`count()`函数是一个方便且直观的工具,用于...

    廖雪峰Python3教程完整版.pdf

    例如,datetime模块可以进行日期和时间的操作,collections模块包含了一些特殊的容器类型,itertools模块提供了迭代器构建块,PIL模块支持图像处理,virtualenv模块用于创建隔离的Python环境,以及PIL、urllib等模块...

    Python学习手册 第4版 PDF

    8. 标准库:简要介绍了Python标准库中一些常用的模块,如datetime、collections、functools等。 尽管提供了大量的技术细节和编程示例,这本书并不仅限于对语言的语法的介绍。作者Mark Lutz通过自己的经验,还提供了...

    免费 Python核心编程(中文第二版)带目录.pdf

    此外,Python的内置数据结构和标准库中的数据结构如`collections`模块,也会被详细探讨。 Python的错误和异常处理机制是其强大的特性之一,书中会解释如何有效地捕获和处理异常,以提高程序的健壮性。同时,单元...

    廖雪峰python教程打印版(完整版)(.pdf)

    Python的标准库中包含了大量常用的内建模块,如datetime、collections、hashlib等。这些模块为Python程序提供了额外的功能,如日期和时间操作、高级数据结构、数据哈希处理等。 13. 常用第三方模块 第三方模块通常...

    Python之旅.pdf

    对于网络编程,书籍简要介绍了HTTP协议,并讲解了如何使用标准模块如`argparse`进行命令行参数解析,`base64`进行数据编码,`collections`提供高级数据结构,`itertools`处理无限迭代,`datetime`处理日期和时间,`...

    Python3 教程

    - 正则表达式和常用内建模块:探索datetime、collections、base64、struct、hashlib、itertools等模块的使用。 - 图形界面、网络编程、电子邮件处理、数据库访问、Web开发:覆盖Python在这些领域的应用和相关技术。 ...

    Python3 教程.pdf

    常用内建模块如datetime、collections、base64、struct、hashlib、itertools、XML、HTMLParser、urllib等提供了丰富的功能来处理日期时间、数据结构、编码、系统相关、数据哈希、迭代工具、解析XML和HTML以及处理URL...

    Manning.IronPython.in.Action

    《IronPython in Action》这本书深入浅出地讲解了这些主题,并通过实例来展示IronPython的强大功能。读者可以通过阅读书中的内容,结合实际项目实践,掌握IronPython的使用,从而在.NET平台上充分发挥Python的潜力。...

    The.Python.Standard.Library.by.Example.2011.RETAiL.eBOOk

    这本书通过实例的方式,详细讲解了Python编程中标准库的各种功能和应用,帮助开发者深入理解和掌握Python的强大功能。 Python标准库是Python语言的核心组成部分,包含了大量预装模块,覆盖了网络通信、文件处理、...

Global site tag (gtag.js) - Google Analytics