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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python深入学习之特殊方法与多范式
Aug 31 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
python openpyxl使用方法详解
Jul 18 Python
Django实现auth模块下的登录注册与注销功能
Oct 10 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
Python Dataframe常见索引方式详解
May 27 Python
python和php哪个容易学
Jun 19 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
php执行sql语句的写法
2009/03/10 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
JS 统计时间
2021/03/09 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python 处理string到hex脚本的方法
2018/10/26 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
网络工程师职业规划
2014/02/10 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
国防教育标语
2014/10/08 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2015年端午节活动总结
2015/02/11 职场文书
运动会广播稿100字
2015/08/19 职场文书
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技