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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python FTP操作类代码分享
May 13 Python
Python socket编程实例详解
May 27 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python 备份程序代码实现
Mar 06 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
python 下载文件的几种方法汇总
Jan 06 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
解析PHP实现下载文件的两种方法
2013/07/05 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php文件系统处理方法小结
2016/05/23 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
详解weex默认webpack.config.js改造
2018/01/08 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
vue中轮训器的使用
2019/01/27 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
Pandas之缺失数据的实现
2021/01/06 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
应届生英语教师求职信
2013/11/05 职场文书
师说教学反思
2014/02/07 职场文书
自我鉴定标准格式
2014/03/19 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
商务代表岗位职责
2015/02/15 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
Java中try catch处理异常示例
2021/12/06 Java/Android