python编程学习使用管道Pipe编写优化代码


Posted in Python onNovember 20, 2021

我们知道 map 和 filter 是两种有效的 Python 方法来处理可迭代对象。

但是,如果你同时使用 map 和 filter,代码可能看起来很混乱。

python编程学习使用管道Pipe编写优化代码

如果你可以使用管道那不是更好了?像下面这样的方式来处理。

python编程学习使用管道Pipe编写优化代码

Pipe 库可以做到这一点。

什么是管道?

Pipe 是一个 Python 库,可让你在 Python 中使用管道。

管道 (|) 将一种方法的结果传递给另一种方法。

我喜欢 Pipe,因为它使我的代码将多个方法应用于 Python 可迭代对象时看起来更简洁。由于 Pipe 只提供了几个方法,所以学习Pipe也很容易。 在本文中,我将向你展示一些我认为最有用的方法。

要安装Pipe,请输入:

pip install pipe

Where:可迭代对象中的过滤元素

与 SQL 类似,Pipe 的 where 方法也可用于过滤可迭代对象中的元素。

python编程学习使用管道Pipe编写优化代码

Select: 将函数应用于可迭代对象

select方法类似于map方法。

select 将方法应用于可迭代的每个元素。

在下面的代码中,我使用 select 将列表中的每个元素乘以 2。

python编程学习使用管道Pipe编写优化代码

现在,你可能想知道:如果 map 和 filter 具有相同的功能,为什么我们需要 where 和 select 方法?

这是因为你可以使用管道在另一个方法之后插入一个方法。 因此,使用管道消除了嵌套的括号并使代码更具可读性。

python编程学习使用管道Pipe编写优化代码

展开可迭代对象

1、chain方法

使用嵌套的可迭代对象可能会很痛苦。 幸运的是,我们可以使用 chain 来链接一系列可迭代对象。

python编程学习使用管道Pipe编写优化代码

尽管应用 chain 可以使可迭代对象的嵌套较少,我们仍然需要一个更强大的工具。 为了处理深度嵌套的列表,我们可以使用 traverse 代替。

2、traverse:递归展开可迭代对象

traverse 方法可用于递归展开可迭代对象。 你可以使用此方法将深度嵌套的列表转换为平面列表。

python编程学习使用管道Pipe编写优化代码

让我们将此方法与 select 方法集成以获取字典的值并展平列表。

python编程学习使用管道Pipe编写优化代码

这样处理是不是很酷?

将列表中的元素分组

有时,使用特定函数对列表中的元素进行分组可能很有用。 这可以通过 groupby 方法轻松完成。

为了看看这个方法是如何工作的,让我们把一个数字列表变成一个字典,这个字典根据数字是偶数还是奇数来分组。

python编程学习使用管道Pipe编写优化代码

在上面的代码中,我们使用 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 方法:

python编程学习使用管道Pipe编写优化代码

dedup 方法删除列表中的重复项

python编程学习使用管道Pipe编写优化代码

这听起来可能并不有趣,因为 set 方法可以做同样的事情。 但是,此方法更灵活,可以让你获取唯一元素。

例如,你可以使用此方法获取一个小于 5 的唯一元素和另一个大于或等于 5 的唯一元素。

python编程学习使用管道Pipe编写优化代码

现在,让我们将此方法与 select 结合起来,从哪里获取具有重复键和 None 值的字典的值。

python编程学习使用管道Pipe编写优化代码

在上面的代码中,我们:

  • 删除具有相同名称的项目
  • 获取计数值
  • 只选择整数值。

在几行代码中,我们可以将多个方法应用于可迭代对象,同时仍然可以保持代码整洁,不是吗?

结论

刚刚我们学习了如何使用管道来保持代码简洁简洁, 我希望这篇文章能让你了解到可迭代对象上的复杂操作其实只需要一行简单的代码。

以上就是python编程学习使用管道Pipe编写优雅代码的详细内容,更多关于Python管道Pipe 编写代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python简单日志处理类分享
Feb 14 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
python 全局变量的import机制介绍
Sep 07 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
pandas修改DataFrame列名的方法
Apr 08 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
创建Django项目图文实例详解
Jun 06 Python
django之状态保持-使用redis存储session的例子
Jul 28 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Python实现仓库管理系统
May 30 Python
python自动化测试通过日志3分钟定位bug
Nov 20 #Python
Python实现位图分割的效果
python脚本框架webpy模板赋值实现
python脚本框架webpy模板控制结构
Nov 20 #Python
python脚本框架webpy的url映射详解
Nov 20 #Python
Pygame Time时间控制的具体使用详解
Nov 17 #Python
Pygame如何使用精灵和碰撞检测
You might like
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
php文件上传类完整实例
2016/05/14 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
javascript eval函数深入认识
2009/02/21 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
python检测服务器是否正常
2014/02/16 Python
python的即时标记项目练习笔记
2014/09/18 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
神经网络python源码分享
2017/12/15 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python redis 删除key脚本的实例
2019/02/19 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Django获取应用下的所有models的例子
2019/08/30 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
Python super()函数使用及多重继承
2020/05/06 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
课外科技活动总结
2014/08/27 职场文书
户外活动总结
2015/02/04 职场文书
个人年终总结范文
2015/03/09 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
关于童年的读书笔记
2015/06/26 职场文书
结婚司仪主持词
2015/06/29 职场文书
python process模块的使用简介
2021/05/14 Python
Java中的随机数Random
2022/03/17 Java/Android
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
Flink 侧流输出源码示例解析
2022/09/23 Servers