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中的descriptor描述器的作用及用法
Jun 27 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
python如何将两个txt文件内容合并
Oct 18 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
Python dict的常用方法示例代码
Jun 23 Python
python 写一个性能测试工具(一)
Oct 24 Python
实战Python爬虫爬取酷我音乐
Apr 11 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python开启debug模式的方法
2019/06/27 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
J2EE包括哪些技术
2016/11/25 面试题
利群广告词
2014/03/20 职场文书
双语教学实施方案
2014/03/23 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
公司合并协议书范本
2014/09/30 职场文书
五一劳动节活动总结
2015/02/09 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
教师节联欢会主持词
2015/07/04 职场文书
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang