加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

四种高性能数据类型,Python collections助你优化代码、简洁任务

发布时间:2019-11-05 02:18:16 所属栏目:移动互联 来源:机器之心编译
导读:在这篇文章中,机器学习工程师 George Seif 介绍了 Python collections 模块非常受欢迎的四种数据类型以及它们各自的使用方法。这些数据类型可以对代码进行优化,进而实现更简洁的任务执行。 Python 的最大优势之一就是它有各种各样的模块和软件包可供选择

如果我们改用 list 来初始化我们的 defaultdict,也就是 names_dict = defaultdict(list),那么「Sara」的值将被初始化成一个空列表 [],打印来的内容就变成了:

  1. defaultdict(<class 'int'>, {'Bob': 1, 'Katie': 2, 'Sara': []}) 

如果要了解更多关于 defaultdict 的功能,可以查看官方文档。

deque

官方文档:https://docs.python.org/2/library/collections.html#collections.deque

queue 是计算机科学中的一种基础数据架构,它遵循先进先出(First-In-First-Out,FIFO)的原则。简单来说,就是添加到 queue 中的第一个对象也必须是要第一个删除。我们只能在 queue 前面插入内容,也只能从后面删除内容——无法对中间内容进行操作。

collections 库中的 deque 对该功能进行了优化。这个方法的一个关键特性是保持队列长度一直不变,也就是说,如果你将 queue 的最大大小设置为 10,那么 deque 将根据 FIFO 原则添加和删除元素,以保持 queue 的最大大小为 10。这是迄今为止 Python 中使用 queue 的最好方法了。

再来看一个例子。我们先创建了一个 deque 对象,然后用从 1 到 10 的整数初始化它。

  1. from collections import deque 
  2.  
  3. my_queue = deque(maxlen=10) 
  4.  
  5. for i in range(10): 
  6.  
  7.     my_queue.append(i+1) 
  8.  
  9. print(my_queue) 

在上面的代码中,我们首先初始化 deque,指定它的最大长度为 10。然后,我们通过 for loop 将值插入到 queue 中。注意这里我们使用了与常见 Python list 相同的方式填充 queue。最后,我们把结果打印出来。

  1. deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10) 

因为我们的 queue 被设置成 maxlen=10,而 loop 值添加了 10 个元素,所以这个 queue 包含了从 1 到 10 的所有数字。现在我们来看一下如果继续向里面添加数字会发生什么。

  1. for i in range(10, 15): 
  2.  
  3.     my_queue.append(i+1) 
  4.  
  5. print(my_queue) 

在上述代码中,我们又向 queue 中添加了 5 个元素——数字 11 到 15。但是我们的 queue 只能有 10 个元素,所以它需要删除一些元素。因为 queue 必须服从 FIFO 原则,所以它删掉了前五个插入到 queue 中的元素,按照插入顺序就是 [1, 2, 3, 4, 5]。打印的结果如下:

  1. deque([6, 7, 8, 9, 10, 11, 12, 13, 14, 15], maxlen=10) 

如果要了解更多关于 deque 的功能,可以查看官方文档。

namedtuple

官方文档:https://docs.python.org/2/library/collections.html#collections.namedtuple

当你使用 python 创建一个常规 tuple 时,其元素都是通用的,而且没有被命名。这使得你必须记住每个 tuple 元素的精确索引。namedtuple 就可以解决这个问题。

namedtuple() 可以返回一个 tuple,该 tuple 中的每个位置都有固定名称,而且 namedtuple 对象也有通用名称。要使用 namedtuple,需要先为其创建一个模板。下面的代码创建了一个名为「Person」的 namedtuple 模板,其属性为「name」、「age」和「job」。

  1. from collections import namedtuple 
  2.  
  3. Person = namedtuple('Person', 'name age job') 
  4.  
  5. Once the template is created, you can use it to create namedtuple objects. Let’s create 2 namedtuple’s for 2 Persons and print out their representation. 
  6.  
  7. Person = namedtuple('Person', 'name age job') 
  8.  
  9. Mike = Person(name='Mike', age=30, job='Data Scientist') 
  10.  
  11. Kate = Person(name="Kate", age=28, job='Project Manager') 
  12.  
  13. print(Mike) 
  14.  
  15. print(Kate) 

上述代码很容易理解,我们为 namedtuple 初始化了一个「Person」模板,并初始化了其所有的属性。上述代码最后的打印结果是:

  1. Person(name='Mike', age=30, job='Data Scientist') 
  2.  
  3. Person(name='Kate', age=28, job='Project Manager') 

因此,namedtuple 让 tuple 的使用更简单、更可读且更有组织性。

如果要了解更多关于 namedtuple 的功能,可以查看官方文档。

【编辑推荐】

  1. 想看女神喜不喜欢你,用AI机器扫扫脸就知道
  2. Github标星10.4K!Chrome好用的插件都在这里了
  3. 管理 | 技术Leader:选OKR还是KPI?
  4. 我花10个小时,写出了小白也能看懂的阿里数据中台分析
  5. 81页计算机视觉学习指南,助你从萌新长成老司机
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读