python编程学习使用管道Pipe编写优化代码
作者:Python学习与数据挖掘 发布时间:2023-08-20 04:08:45
我们知道 map 和 filter 是两种有效的 Python 方法来处理可迭代对象。
但是,如果你同时使用 map 和 filter,代码可能看起来很混乱。
如果你可以使用管道那不是更好了?像下面这样的方式来处理。
Pipe 库可以做到这一点。
什么是管道?
Pipe 是一个 Python 库,可让你在 Python 中使用管道。
管道 (|) 将一种方法的结果传递给另一种方法。
我喜欢 Pipe,因为它使我的代码将多个方法应用于 Python 可迭代对象时看起来更简洁。由于 Pipe 只提供了几个方法,所以学习Pipe也很容易。 在本文中,我将向你展示一些我认为最有用的方法。
要安装Pipe,请输入:
pip install pipe
Where:可迭代对象中的过滤元素
与 SQL 类似,Pipe 的 where 方法也可用于过滤可迭代对象中的元素。
Select: 将函数应用于可迭代对象
select方法类似于map方法。
select 将方法应用于可迭代的每个元素。
在下面的代码中,我使用 select 将列表中的每个元素乘以 2。
现在,你可能想知道:如果 map 和 filter 具有相同的功能,为什么我们需要 where 和 select 方法?
这是因为你可以使用管道在另一个方法之后插入一个方法。 因此,使用管道消除了嵌套的括号并使代码更具可读性。
展开可迭代对象
1、chain方法
使用嵌套的可迭代对象可能会很痛苦。 幸运的是,我们可以使用 chain 来链接一系列可迭代对象。
尽管应用 chain 可以使可迭代对象的嵌套较少,我们仍然需要一个更强大的工具。 为了处理深度嵌套的列表,我们可以使用 traverse 代替。
2、traverse:递归展开可迭代对象
traverse 方法可用于递归展开可迭代对象。 你可以使用此方法将深度嵌套的列表转换为平面列表。
让我们将此方法与 select 方法集成以获取字典的值并展平列表。
这样处理是不是很酷?
将列表中的元素分组
有时,使用特定函数对列表中的元素进行分组可能很有用。 这可以通过 groupby 方法轻松完成。
为了看看这个方法是如何工作的,让我们把一个数字列表变成一个字典,这个字典根据数字是偶数还是奇数来分组。
在上面的代码中,我们使用 groupby 将数字分组为偶数组和奇数组。 应用此方法后的输出如下所示:
[('Even', <itertools._grouper at 0x7fbea8030550>),
('Odd', <itertools._grouper at 0x7fbea80309a0>)]
接下来,我们使用 select 将元组列表转换为字典列表,其键是元组中的第一个元素,值是元组中的第二个元素。
[{'Even': [2, 4, 6, 8]}, {'Odd': [1, 3, 5, 7, 9]}]
为了只获取大于 2 的值,我们可以在 select 方法中添加 where 方法:
dedup 方法删除列表中的重复项
这听起来可能并不有趣,因为 set 方法可以做同样的事情。 但是,此方法更灵活,可以让你获取唯一元素。
例如,你可以使用此方法获取一个小于 5 的唯一元素和另一个大于或等于 5 的唯一元素。
现在,让我们将此方法与 select 结合起来,从哪里获取具有重复键和 None 值的字典的值。
在上面的代码中,我们:
删除具有相同名称的项目
获取计数值
只选择整数值。
在几行代码中,我们可以将多个方法应用于可迭代对象,同时仍然可以保持代码整洁,不是吗?
结论
刚刚我们学习了如何使用管道来保持代码简洁简洁, 我希望这篇文章能让你了解到可迭代对象上的复杂操作其实只需要一行简单的代码。
来源:https://blog.csdn.net/weixin_38037405/article/details/121299624


猜你喜欢
- 主类别表名:Navtion_TopSubject 主键fTopID Char(36) 次类别表名:Navtion_NodeSubject 外
- 业务说明:此示例脚本作用,包含方法和逻辑:图像读取,图片尺寸读取,重置图片大小,图片等比缩放,图片拼接,图片覆盖与堆叠(子母图)图片展示:单
- 【简介】django-admin.py是Django的一个用于管理任务的命令行工具。本文将描述它的大概用法。另外,在每一个Django pr
- 写完调用天气接口的demo之后,小程序调用天气接口并且渲染在页面,顺便再调用了一下美图的接口API:美图APIurlwxml:<vie
- 本文研究的主要是Django开发中的signal 的相关内容,具体如下。前言在web开发中, 你可能会遇到下面这种场景:在用户完成某个操作后
- 一、问题描述使用idea操作代码进行VCS很是方便,向github进行push和pull操作非常方便,但是,最近频繁提示需要重新输入用户名和
- 版本信息:python:3.6mysql:5.7pyMysql:0.7.11################################
- 一、super函数简介python内置函数super()主要用于类的多继承中,用来查找并调用父类的方法,所以在单重继承中用不用 super
- 学习自然语言的最好方法就是溶入相应的语言环境在交流中学习,学习一种编程语言的最好方法就是看例程。为了帮助大家建立wml应用的第一印象,所以请
- 前言在AI领域,来快速实现一个idea:前后端开发+部署+展现,如果走传统的前后端分离开发+服务器docker部署等方式,会很重且入门成本很
- 看了两天 go 语言,是时候练练手了。go 的 routine(例程) 和 chan(通道) 简直是神器,实现多线程(在 go 里准确的来说
- 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念。装饰器的基本概念装饰器是一个可调用对象,它的参数是另一个
- 本月的每月挑战会主题是NLP,我们会在本文帮你开启一种可能:使用pandas和python的自然语言工具包分析你Gmail邮箱中的内容。NL
- MySQL的主键可以是自增的,那么如果在断电重启后新增的值还会延续断电前的自增值吗?自增值默认为1,那么可不可以改变呢?下面就说一下 MyS
- Python中打开文本使用的是with语句,比如打开一个文件并读取每一行with open(filename) as fp: f
- 以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary
- 本文实例为大家分享了Bootstrap modal使用及点击外部不消失的解决方法,供大家参考,具体内容如下1.代码:<input id
- DataTable dt = new DataTable(); dt = ds.Tables["All"].Clone(
- 百度OCR体验地址:https://ai.baidu.com/tech/imagerecognition/general腾讯OCR体验地址:
- 学过Python的人应该都知道,Python是支持多线程的,并且是native的线程。本文主要是通过thread和threading这两个模