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脚本和ADB命令实现卸载App
Feb 10 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
Python装饰器的应用场景代码总结
Apr 10 Python
python的flask框架难学吗
Jul 31 Python
Python基础之pandas数据合并
Apr 27 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
python编程项目中线上问题排查与解决
Nov 01 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
php生成略缩图代码
2012/07/16 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
prototype 学习笔记整理
2009/07/17 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python用户评论标签匹配的解决方法
2018/05/31 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python如何将函数值赋给变量
2020/04/28 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
就业自我评价
2014/02/04 职场文书
少先队入队活动方案
2014/02/08 职场文书
创先争优活动方案
2014/02/12 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
怎么写好自荐书
2014/03/02 职场文书
社区母亲节活动方案
2014/03/05 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书