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 相关文章推荐
Django URL传递参数的方法总结
Aug 28 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
python放大图片和画方格实现算法
Mar 30 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
python3.5 email实现发送邮件功能
May 22 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
使用python绘制二维图形示例
Nov 22 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 Python
python开发人人对战的五子棋小游戏
May 02 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
深入理解python try异常处理机制
2016/06/01 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python zip()函数用法实例分析
2018/03/17 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python异常触发及自定义异常类解析
2019/08/06 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
利用python 读写csv文件
2020/09/10 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
材料员岗位职责
2014/03/13 职场文书
幸福来敲门观后感
2015/06/04 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers