这些好用却鲜为人知的Python库,你知道多少?
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: 读芯术
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef
生活中,常常有一些人,明明很有能力,却不被身边人看好。
是金子总能发光,这句话放在现实生活中,其实并不完全适用,人口众多,不乏有才之人,想要成功就需要一个一鸣惊人的机会。
Python也是。
Python中有很多现成的性能不错的库。collections就是其中一个。
collections模块提供了“高性能的容器数据类型”,是通用容器字典、列表、集合和元组的完美替代。
但却常常被人忽视或者看轻。
今天,小芯就将努力当一个“好伯乐”,简洁明了地为大家介绍那些不被看好的Python库,发掘出它们的无限潜能。
在本文中将会向读者仔细介绍其中的三种数据类型,相信在阅读完本文后,大家一定会疑惑自己之前是如何在没有这些库的情况下完成编程。
Counter
Counter的名字很贴切——它的主要功能就是计数。这听起来很简单,但事实证明,数据科学家经常不得不进行计数,所以它十分有效。
有几种方法可以实现初始化,但笔者通常会设置一个如下图的值列表
from collections import Counter
ages = [22, 22, 25, 25, 30, 24, 26, 24, 35, 45, 52, 22, 22, 22, 25, 16, 11, 15, 40, 30]
value_counts = Counter(ages)
print(value_counts.most_common())
counter.py hosted with ❤ by GitHub
如果读者要运行上述代码(建议使用这个高效率工具),就会得到以下输出:
[(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是在首次遇到每个键时使用默认值初始化的多功能字典。接下来是一个实例
From collections import defaultdict
my_default_dict = defaultdict(int)
for letter in'the red fox ran as fast as it could':
my_default_dict[letter] +=1
print(my_default_dict)
defaultdict.py hosted with ❤ by GitHub
返回
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来解决这个窘境。
仅仅只需要多写几行代码,混乱的列表立刻就会恢复秩序。如下图所示
from collections import namedtuple
Features = namedtuple('Features', ['age', 'gender', 'name'])
row = Features(age=22, gender='male', name='Alex')
print(row.age)
namedtuple.py hosted with ❤ by GitHub
如果要运行这段代码,它就会印出“22”的字样,即特征用户存储在行中的年龄。简直不可思议!现在,大可不必使用索引来访问,取而代之的是一些易于理解的名称,这大大提高了代码的可维护性和整洁度。
这些功能都有助于编写更加简洁的代码。
看到这里,读者应该对collections库和它的一些很棒的功能有了一些了解,赶紧使用起来吧!
你会惊讶地发现它们很多隐藏的用处,以及它给你的代码带来的质的改变。
尽情享受它们带来的便利!
动动你的小手手,一起来试试吧~
这些好用却鲜为人知的Python库,你知道多少?的更多相关文章
- 9 个鲜为人知的 Python 数据科学库
除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...
- 11个并不广为人知,但值得了解的Python库
这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ...
- python自动化测试(4)-使用第三方python库技术实现
python自动化测试(4)-使用第三方python库技术实现 1 概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...
- OSX下 pip更新及安装python库
直接执行安装命令 $ pip install builtwith 提示pip当前版本为7.1.2,要使用"pip install --upgrade pip"升级到8.1.2 $ ...
- protocol buffer c++ python库安装
c++库安装较简单,不要用源码,还得下载依赖,就被墙了 https://github.com/google/protobuf/releases 下载一个最新的release安装 #protoc -- ...
- Windows版的各种Python库安装包下载地址与安装过程
在用Python开发时(Windows环境),会碰到需要安装某个版本的第三方库,为了以后查找.安装方便,总结如下: windows版的各种Python库安装包下载地址:http://www.lfd.u ...
- Python 库大全
作者:Lingfeng Ai链接:http://www.zhihu.com/question/24590883/answer/92420471来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- python库tkinter、pygame中几点需要注意的问题
恍然之间已经16年快四月份了,已经好久都没有写过东西了.. 最近在用python做一些小的游戏,在网上找了一些Python库,Python中游戏编程最常用的还是pygame了,其次是Tkinter p ...
- Robot Framework: 自定义自己的python库
利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现.这在rf中,就需要自己定义python库.这个过程其实不复杂,本文来介绍下. ...
随机推荐
- 如何用node.js中的ejs写入页面_以6.19京东秒杀的商品为例
用erpress搭建好基本框架后,在自己新建的express文件夹下将会生成;bin,public,routes,views,app.js,package.json,node_modules目录哟!, ...
- Linux 部署 java1.8
1.安装 查看java安装包 yum list | grep java 使用yum安装 yum install java-1.8.0-openjdk.x86_64 修改环境变量 vi /etc/pro ...
- dev c++必须修改的三处默认设置
此文档记录参加pat考试并且以dev c++[针对5.11版本]软件作为开发工具时,必须修改的三个默认设置. 1.修改默认语言标准 Dev C++ 5.11 版本支持较新的 C 和 C++ 标准,但是 ...
- C语言中的顺序点
C语言盲点1.函数参数的求值顺序依赖于编译器,例如f(a,a++);是先求a++还是求a不一定 2.C语言中的大多数运算符对其操作数的求值顺序也依赖于编译器 警告int i = f() * g();这 ...
- PHP 开发工程师基础篇 - PHP 数组
数组 (Array) 数组是 PHP 中最重要的数据类型,可以说是掌握数组,基本上 PHP 一大半问题都可以解决. PHP 数组与其他编程语言数组概念不一样.其他编程语言数组是由相同类型的元素(ele ...
- C++ 面向对象程序设计复习大纲
这是我在准备C++考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题会 ...
- Python内部参数中对外部实参的影响
无论函数传递的参数的可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用,而如果传递的参数是可变类型,在函数内部使用方法修改了数据的内容,同样会影响到外部 ...
- 使用laravel-amdin调用文件上传阿里oss注意点
开发者工作中,项目代码开发提高效率,往往会使用一些github上面的一些扩展类,这里举例说明一下遇到的情况. 一.使用laravel-admin框架开发管理后台文件或者图片上传 情景:运营或者产品通过 ...
- IntelliJ IDEA中你应该知道的快捷键
IDEA官方所有快捷键:参考:https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_Refe ...
- linux下挂载iso镜像文件
linux挂载iso镜像可以分为两种,直接挂载镜像和上传镜像文件至服务器进行挂载 一.虚拟机镜像挂载 测试时使用虚拟机,此时可以直接在虚拟机的设置中将镜像文件直接选择并进行挂载,无需上传至虚拟机服务器 ...