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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python中的数学运算操作符使用进阶
Jun 20 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
python实现斗地主分牌洗牌
Jun 22 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
Python实现异步IO的示例
Nov 05 Python
python 模拟登陆github的示例
Dec 04 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JavaScript多线程详解
2015/08/12 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
浅谈Python中带_的变量或函数命名
2017/12/04 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
python新手学习可变和不可变对象
2020/06/11 Python
python实现图片素描效果
2020/09/26 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
eBay加拿大站:eBay.ca
2019/06/20 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
如何撰写岗位职责
2014/02/01 职场文书
人事文员岗位职责
2014/02/16 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
《火烧云》教学反思
2014/04/12 职场文书
物业管理工作方案
2014/05/10 职场文书
职务任命书范本
2014/06/05 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
医学生自荐信范文
2015/03/05 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
JS监听Esc 键触发事键
2021/04/14 Javascript
logback 实现给变量指定默认值
2021/08/30 Java/Android
关于python中模块和重载的问题
2021/11/02 Python