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脚本生成Android SALT扰码的方法
Sep 18 Python
python模块之StringIO使用示例
Apr 08 Python
Python随机生成数模块random使用实例
Apr 13 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
python中的json总结
Oct 11 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
jupyter notebook 重装教程
Apr 16 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python机器学习之逻辑回归
May 11 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
js中事件对象和事件委托的介绍
2019/01/21 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Python初学者常见错误详解
2019/07/02 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
django之自定义软删除Model的方法
2019/08/14 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
学术会议邀请函范文
2014/01/22 职场文书
运动会致辞稿50字
2014/02/04 职场文书
运动会方阵解说词
2014/02/12 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2014年保管员工作总结
2014/11/18 职场文书
小学运动会前导词
2015/07/20 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
python中pycryto实现数据加密
2022/04/29 Python