妙啊,Python 管道 Pipe 编写代码如此优雅

news2024/9/20 16:56:07

大家好,今天这篇文章我将详细讲解 Pipe 如何让你的代码更加简洁的方法,喜欢本文点赞支持,欢迎收藏学习,文末提供技术交流群,欢迎畅聊!

我们知道 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 值的字典的值。
在这里插入图片描述
在上面的代码中,我们:

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

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

结论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何基于YAML设计接口自动化测试框架?看完秒会!

在设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML、CSV&#xff09;或者数据库中&#xff0c;实现脚本与数据解耦&#xff0c;方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例&…

[附源码]计算机毕业设计springboot招聘系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

电子学会2021年6月青少年软件编程(图形化)等级考试试卷(四级)答案解析

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;四级&#xff09; 分数&#xff1a;100.00 题数&#xff1a;24 一、单选题&#xff08;共10题&#xff0c;每题3分&#xff0c;共30分&#xff09; 1. 执行下列程序&#xff0c;输出的结果为…

bert 环境搭建之PytorchTransformer 安装

这两天跑以前的bert项目发现突然跑不了&#xff0c;报错信息如下&#xff1a; Step1 transformer 安装 RuntimeError: Failed to import transformers.models.bert.modeling_bert because of the following error (look up to see its traceback): module signal has no att…

IOT物联网系统架构

主要由 IotCloodServer物网联服务平台&#xff0c; IotAdminWeb物联网管理平台&#xff0c; IotDataProcessing物联网数据平台&#xff0c; IotDeviceGateway物联网边缘网关&#xff0c; IotDeviceToolHepler物联网边缘网关 控制 设备的工具类&#xff0c; IotApp物联网应…

SpringBoot_整合Mybatis

一 导入依赖 <!--整合mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><group…

ubuntu20.04屏幕亮度无法调节的解决方法->安装 brightness-controller-simple 软件

文章目录一、问题描述二、解决方法参考链接一、问题描述 安装ubunt20.04.5 之后&#xff0c;调节Ubuntu上方的亮度控制条、按快捷键(FnF5、FnF6) 都不能实现调节亮度的功能。 二、解决方法 安装 brightness-controller-simple 软件&#xff0c;利用软件调节亮度。 sudo add…

论文投稿指南——中文核心期刊推荐(计算机技术2)

>>>深度学习Tricks&#xff0c;第一时间送达<<< 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。下面&#xff0c;简单介绍下什么是中文核心期刊要目总览&#xff1a; 《中文核心期刊要目总…

Web安全专业学习路线

最专业、全面的网络安全学习路线来咯~&#xff08;虽然是网络安全学习路线&#xff0c;但重心还是在Web安全上&#xff09; 展示学习路线之前&#xff0c;建议大家先了解一下这几个问题&#xff0c;既是认清形势&#xff0c;也是认清自我&#xff1a; 为什么要学网络安全&…

期末测试——JavaScript方式练习题

练习目标&#xff1a; 技术简介&#xff1a; js外部引入顺序结构jQuery Dom操作JavaScrip循环技巧JavaScrip数据操作资源地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1VZMGTKj3Aq9Zn6mtee0egw 提取码&#xff1a;1111 关键字&#xff1a; 1、append()&#x…

高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取

高分辨率遥感影像在城市交通领域具有广泛的应用前景&#xff1a;如遥感交通调查、遥感影像地图与电子地图制作、道路工程地质遥感解译、交通安全与知道抗灾救灾、交通事故现场快速勘察、交通需求预测、车辆与车牌视频识别等等。高分辨率影像比如高分二号卫星、高分一号卫星&…

基于蝙蝠算法实现电力系统经济调度(Matlab代码实现)

目录 摘要&#xff1a; 1.蝙蝠优化算法的基本原理&#xff1a; 2.蝙蝠优化算法的流程&#xff1a; 3.仿真实验分析&#xff1a; 摘要&#xff1a; 基于Matalb平台&#xff0c;构建基于蝙蝠活动行为的蝙蝠优化算法&#xff0c;对一个含有6个火电机组的电力系统进行优化调度…

redis6.2(二)Redis的新数据类型、使用java语言操作Redis

redis的安装配置、基本数据类型可以参考: redis6.2&#xff08;一&#xff09;安装、配置、常用数据类型 5、Redis的新数据类型 (1) Bitmaps Redis提供了Bitmaps这个“数据类型”可以实现对位的操作&#xff1a; &#xff08;1&#xff09; Bitmaps本身不是一种数据类型&am…

Spring基础篇:MVC框架整合

MVC框架整合 MVC框架整合思想 搭建Web运行环境 在Project structor当中进行创建一个maven项目&#xff0c;使用maven-archetype-webapp这个模式来创建maven项目&#xff08;使用这种模板创建项目的好处就是好多东西都给你搭建好了。&#xff09;&#xff0c;项目下Src>mai…

12月03日(第五天)

case 后面必须是常量或者字面量&#xff0c;swtich&#xff08;表达式),表达式可以是short&#xff0c;int,byte,char或者字符串&#xff0c;每个case要注意break语句&#xff0c; switch case的使用&#xff0c;stream流操作对象是数组或集合&#xff0c;第一步获取源数据&…

mysql基础部分第一次复习(9-18章)

子查询 SELECT last_name,salary FROM employees WHERE salary > ( SELECT salary FROM employees WHERE last_name Abel );SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE…

JavaScript -- 09. 内置对象的介绍

文章目录内置对象1 解构赋值1.1 保留默认值1.2 接受剩余的所有参数1.3 对函数执行结果解构1.4 交换两个变量的值1.5 二维数组结构2 对象的解构2.1 声明对象同时解构对象2.2 先声明再解构2.3 解构不存在的属性2.4 设置解构别名2.5 设置解构默认值3 对象的序列化3.1 对象的序列化…

【OpenCV-Python】教程:3-15 分水岭图像分割

OpenCV Python 分水岭图像分割 【目标】 学习使用分水岭方法进行基于标记的图像分割cv2.watershed() 【理论】 任何灰度图像都可以被视为地形表面&#xff0c;其中高强度表示山峰和丘陵&#xff0c;而低强度表示山谷&#xff0c;。你开始用不同颜色的水&#xff08;标签&am…

耗时4个月,阿里架构师打造Java面试突击文档,10位朋友已拿offer

不论是校招还是社招都避免不了各种面试、笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循”说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后&#xff0c;决胜千里之外&#xff01;不打毫无准备的仗 …

数据结构与算法(六) 贪心算法

这篇文章来讲贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;这是一种特殊的动态规划算法 1、本质 我们在之前的文章中讲过&#xff0c;动态规划可以解决一类具有最优子结构和重叠子问题特征的问题 贪心算法本质上是一种特殊的动态规划算法&#xff0c;因此在…