|
|
51CTO旗下网站
|
|
移动端

这些很好用却不被看好的Python库,你知道多少?

生活中,常常有一些人,明明很有能力,却不被身边人看好。是金子总能发光,这句话放在现实生活中,其实并不完全适用,人口众多,不乏有才之人,想要成功就需要一个一鸣惊人的机会。

作者:读芯术来源:读芯术|2019-12-02 09:04

生活中,常常有一些人,明明很有能力,却不被身边人看好。

是金子总能发光,这句话放在现实生活中,其实并不完全适用,人口众多,不乏有才之人,想要成功就需要一个一鸣惊人的机会。

Python也是。

Python中有很多现成的性能不错的库。collections就是其中一个。

collections模块提供了“高性能的容器数据类型”,是通用容器字典、列表、集合和元组的完美替代。

但却常常被人忽视或者看轻。

今天,小芯就将努力当一个“好伯乐”,简洁明了地为大家介绍那些不被看好的Python库,发掘出它们的无限潜能。

在本文中将会向读者仔细介绍其中的三种数据类型,相信在阅读完本文后,大家一定会疑惑自己之前是如何在没有这些库的情况下完成编程。

Counter

Counter的名字很贴切——它的主要功能就是计数。这听起来很简单,但事实证明,数据科学家经常不得不进行计数,所以它十分有效。

有几种方法可以实现初始化,但笔者通常会设置一个如下图的值列表:

  1. from  collections import Counter 
  2.  
  3. ages = [22, 22, 25, 25, 30, 24, 26, 24, 35, 45, 52, 22, 22, 22, 25, 16, 11, 15, 40, 30] 
  4.  
  5. value_counts  = Counter(ages) 
  6.  
  7. print(value_counts.most_common()) 

counter.py hosted with ❤ by GitHub

如果读者要运行上述代码(建议使用这个高效率工具),就会得到以下输出:

  1. [(22, 5), (25, 3), (24, 2), (30,2), (35, 1), (40, 1), (11, 1), (45, 1), (15, 1), (16, 1), (52, 1), (26, 1)] 

按最常见的顺序排列的元组列表,其中元组中首先包含值,然后是计数。所以可以迅速地从中看到22岁是最常见的年龄,频率为5次,还有年龄只出现了一次。完成了!

DefaultDict

这是笔者的最爱之一。DefaultDict是在首次遇到每个键时使用默认值初始化的多功能字典。接下来是一个实例。

  1. From collections  import defaultdict 
  2.  
  3. my_default_dict  = defaultdict(int
  4.  
  5. for letter in'the red  fox ran as fast as it could'
  6.  
  7.     my_default_dict[letter] +=1 
  8.  
  9. print(my_default_dict) 

defaultdict.py hosted with ❤ by GitHub

返回

  1. defaultdict(<type 'int'>,{'a': 4, ' ': 8, 'c': 1, 'e': 2, 'd': 2, 'f': 2, 'i': 1, 'h': 1, 'l': 1, 'o':2, 'n': 1, 's': 3, 'r': 2, 'u': 1, 't': 3, 'x': 1}) 

通常,当尝试访问一个不在字典中的值时,就会出现显示错误的界面。还有其他方法可以处理这个问题,但是它会添加一些多余的代码当用户希望使用默认值的时候。在上面的例子中,用int初始化了defauldict,这意味着在第一次访问时,将它假设为0,所以可以很容易地对所有字符进行计数,简洁明了。另一个常见的初始化是list,它允许用户在第一次访问时立即开始附加值。

NamedTuple

NamedTuple对于数据科学家的意义至关重要。接下来这个场景听起来可能十分熟悉, 由于喜欢list,所以正在进行特征工程,只需将这些特征添加到相对应的类中,然后将其输入到机器学习模型中。当得到数百个特征时,情况就会变得十分混乱。对于具体用到的特性,或引用了列表中的哪个索引模棱两可。更糟糕的是,当其他人查看代码时,他们面对这一大堆的特性根本无从下手。

输入NamedTuples来解决这个窘境。

仅仅只需要多写几行代码,混乱的列表立刻就会恢复秩序。如下图所示:

  1. from  collections import namedtuple 
  2.  
  3. Features  = namedtuple('Features', ['age''gender''name']) 
  4.  
  5. row =  Features(age=22, gender='male'name='Alex'
  6.  
  7. print(row.age) 

namedtuple.py hosted with ❤ by GitHub

如果要运行这段代码,它就会印出“22”的字样,即特征用户存储在行中的年龄。简直不可思议!现在,大可不必使用索引来访问,取而代之的是一些易于理解的名称,这大大提高了代码的可维护性和整洁度。

这些功能都有助于编写更加简洁的代码。

看到这里,读者应该对collections库和它的一些很棒的功能有了一些了解,赶紧使用起来吧!

你会惊讶地发现它们很多隐藏的用处,以及它给你的代码带来的质的改变。

尽情享受它们带来的便利!

动动你的小手手,一起来试试吧~

【编辑推荐】

  1. 如何用 Python 预测房价走势?
  2. 这5个Python代码的坏习惯很容易养成,千万不要养成这些坏习惯
  3. 自由软件之父 RMS 认为 GitHub 对自由软件造成了伤害
  4. 在Github上,怎么写出教科书级别的readme
  5. 如何使用Sphinx给Python代码写文档
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

骨干网与数据中心建设案例

骨干网与数据中心建设案例

高级网工必会
共20章 | 捷哥CCIE

403人订阅学习

中间件安全防护攻略

中间件安全防护攻略

4类安全防护
共4章 | hack_man

151人订阅学习

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

291人订阅学习

读 书 +更多

ASP快速建站全程实录

本书从一个网站制作过程入手,详细介绍基于ASP技术建设网站的全过程。全书共10章。第1章,网站制作规划与流程;第2章,IIS安装与调试;第3...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微