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 相关文章推荐
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
对python中执行DOS命令的3种方法总结
May 12 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python 面试中 8 个必考问题
Nov 16 Python
python事件驱动event实现详解
Nov 21 Python
学python安装的软件总结
Oct 12 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
Python代码风格与编程习惯重要吗?
Jun 03 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
vue.js的提示组件
2017/03/02 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Vue程序调试的方法
2019/06/17 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
django2 快速安装指南分享
2018/01/05 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
给领导的检讨书
2014/02/16 职场文书
小学教师评语大全
2014/04/23 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
大学生学年个人总结
2015/02/15 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
python如何正确使用yield
2021/05/21 Python
SSM VUE Axios详解
2021/10/05 Vue.js
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android