Python中itertools库的四个函数介绍


Posted in Python onApril 06, 2022

1. 引言

在Python开发中,​​itertools​​库经常被忽视,实际上该库中抱恨了一些非常棒的函数,特别是用于处于数据流的函数。在本文中,我们将讨论该库中的十分使用的几个函数,并重点介绍什么时候我们应该考虑使用它们。
闲话少说,我们直接开始吧!

2. accumulate() 函数

第三方库​​itertools​​提供的函数​​accumulate()​​,可以帮助我们对数据流执行累积操作。换句话说,假设我们有一个数据列表[a,b,c,d,e]和一个运算f,那么函数​​accumulate()​​可以帮助我们计算​​f(a,b)​​,​​f(f(a,b),c)​​,​​f(f(f(a,b),c),d)​​,等等。
文字有点不直观,那我们来举个累加的栗子吧!

样例代码如下:

import itertools
data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]

res = itertools.accumulate(data, lambda x,y:x+y)
print(list(res))
# [3, 7, 13, 15, 16, 25, 25, 32, 37, 45]

上述函数​​accumulate()​​的作用是:先把3和4相加,然后得到7,再和6相加,得到另一个值,依此类推。

需要注意的是:如果要执行给定3个或更多值的累计操作,则不允许使用该函数,因为accumulate()只接受迭代器,迭代器每次调用next()返回至多1个元素。

3. compress() 函数

函数​​compress()​​可以根据我们的喜好来过滤内容。与函数​​filter()​​函数不同,函数​​compress()​​需要传入相应的标志位来决定是否应该保留每个值。

举个例子会更加直观,相关样例代码如下:

import itertools
data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
selector = [1, 0, 0, 0, 1, 1, 0, 1, 1, 0]
res = itertools.compress(data, selector)
print(list(res))
# [3, 1, 9, 7, 5]

在上面的示例中,如果数据是奇数,则选择器将为 1,否则为 0。因此,函数​​compress()​​ 操作的结果将只是保留原始数据中的奇数。

4. groupby() 函数

在许多情况下,我们会在 Python 中以随机顺序获得一个元组列表,假如我们希望按值对它们进行分组。此时是函数​​ groupby()​​ 发挥作用的完美场景!

函数​​ groupby()​​ 将接受一个可迭代的参数和一个返回值的函数,然后它将按函数返回的值对元组列表进行分组。

例如,我们想按国家对以下城市进行分组:

import itertools

data = [('New York', 'US'), ("Shanghai", "China"),
("LA", 'US'),("Chongqing", "China")]

for city, group in itertools.groupby(sorted(data, key=lambda x: x[1]), lambda x: x[1]):
for i in group:
print("%s is in %s." % (i[0], city))
print("")

# Shanghai is in China.
# Chongqing is in China.

# New York is in US.
# LA is in US.

5. 排列组合操作

排列组合可能是 ​​itertools​​库中最令人惊叹的函数之一,它提供了排列组合运算符!
我们唯一需要做的就是将正确的关键字与输出元组的长度一起传递给相应的函数,

如下例所示:

import itertools
data = [3, 4, 6]

com_res = itertools.combinations(data, 2)
print(list(com_res))
# [(3, 4), (3, 6), (4, 6)]

com_res = itertools.permutations(data, 2)
print(list(com_res))
# [(3, 4), (3, 6), (4, 3), (4, 6), (6, 3), (6, 4)]

com_without_replacement_res = itertools.combinations_with_replacement(data, 2)
print(list(com_without_replacement_res))
# [(3, 3), (3, 4), (3, 6), (4, 4), (4, 6), (6, 6)]

product_res = itertools.product(data, data)
print(list(product_res))
# [(3, 3), (3, 4), (3, 6), (4, 3), (4, 4), (4, 6), (6, 3), (6, 4), (6, 6)]

6 总结

库​​itertools​​对大多数人来说,是一个未被充分利用甚至很少听到的库,但它确实包含一些非常好用的函数。这些函数通常可以帮助我们将代码行数减少到仅一行,使我们的代码看起来更加简洁优雅!

到此这篇关于Python中itertools库的四个函数介绍的文章就介绍到这了,更多相关Python中itertools库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python创建xml的方法
Mar 10 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
Python I/O与进程的详细讲解
Mar 08 Python
Python pandas如何向excel添加数据
May 22 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
Python中22个万用公式的小结
Jul 21 Python
Python Matplotlib库实现画局部图
Nov 17 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python网络爬虫实例讲解
2016/04/28 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python实现udp聊天窗口
2020/03/31 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
实习自我鉴定范文
2013/10/30 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
校三好学生主要事迹
2014/01/11 职场文书
搞笑创意广告语
2014/03/17 职场文书
美国留学经济担保书
2014/05/20 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2014年宣传部工作总结
2014/11/12 职场文书