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分割和拼接字符串
Nov 01 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python探索之修改Python搜索路径
Oct 25 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
numpy基础教程之np.linalg
Feb 12 Python
python for和else语句趣谈
Jul 02 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python+Redis实现布隆过滤器
Dec 08 Python
基于Python绘制个人足迹地图
Jun 01 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
变长双向rnn的正确使用姿势教学
May 31 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
vue中的scope使用详解
2017/10/29 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
js实现简单进度条效果
2020/03/25 Javascript
编程语言Python的发展史
2014/09/26 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python表示矩阵的方法分析
2017/05/26 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
四年的个人工作自我评价
2013/12/10 职场文书
军训心得体会
2013/12/31 职场文书
悬空寺导游词
2015/02/05 职场文书
信仰观后感
2015/06/03 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python