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语言技巧之三元运算符使用介绍
Mar 04 Python
深入理解Python 代码优化详解
Oct 27 Python
python去除字符串中的换行符
Oct 11 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
Python设计模式之外观模式实例详解
Jan 17 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
进行数据处理的6个 Python 代码块分享
Apr 06 Python
如何用六步教会你使用python爬虫爬取数据
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
You might like
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
bootstrap table实例详解
2017/01/06 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
详解Python中的type和object
2018/08/15 Python
pygame实现打字游戏
2021/02/19 Python
python脚本后台执行方式
2019/12/21 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
电焊工工作岗位职责
2014/02/06 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
中学生打架检讨书
2014/10/13 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
ubuntu下常用apt命令介绍
2022/06/05 Servers