这样书写Python代码的方式,实在是太优雅了~

news2024/12/23 15:29:23

文章目录

  • 前言
  • 一、在Python中配合pipe灵活使用链式写法
  • 二 、pipe中常用的管道操作函数
    • 1.使用traverse()展平嵌套数组
    • 2.使用dedup()进行顺序去重
    • 3.使用filter()进行值过滤
    • 4.使用groupby()进行分组运算
    • 5.使用select()对上一步结果进行自定义遍历运算
    • 6.使用sort()进行排序
  • 总结
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


前言

一些比较熟悉pandas的读者朋友应该经常会使用query()eval()pipe()assign()pandas的常用方法,书写可读性很高的「链式」数据分析处理代码,从而更加丝滑流畅地组织代码逻辑。

但在原生Python中并没有提供类似shell中的管道操作符|R中的管道操作符%>%等语法,也没有针对列表等数组结构的可进行链式书写的快捷方法,譬如javascript中数组的map()filter()some()every()等。

正所谓“标准库不够,三方库来凑”,Python原生对链式写法支持不到位没关系,我们可以使用一些简单方便且轻量的第三方库来协助我们在Python代码中大面积实现链式写法,今天的文章中我就将带大家一起学习相关的知识技巧~
在这里插入图片描述


一、在Python中配合pipe灵活使用链式写法

我们将使用到pipe这个第三方库,它不仅内置了很多实用的「管道操作函数」,还提供了将常规函数快捷「转换」为管道操作函数的方法,使用pip install pipe对其进行安装即可。

pipe的用法非常方便,类似shell中的管道操作:以你的数组变量为起点,使用操作符|衔接pipe内置的各个常见管道操作函数,组装起自己所需的计算步骤即可,譬如,我们筛选输入数组中为偶数的,再求平方,就可以写作:

import pipe
 
list(
    range(10) | 
    pipe.filter(lambda x: x % 2 == 0) | 
    pipe.select(lambda x: x ** 2)
)

在这里插入图片描述
因为pipe搭建的管道默认都是惰性运算的,直接产生的结果是生成器类型,所以上面的例子中我们最外层套上了list()来取得实际计算结果,更优雅的方式是配合pipe.Pipe(),将list()也改造为管道操作函数:

from pipe import Pipe
 
(
    range(10) | 
    pipe.filter(lambda x: x % 2 == 0) | 
    pipe.select(lambda x: x ** 2) |
    Pipe(list)
)

在这里插入图片描述
在上面的简单例子中我们使用到的filter()select()等就是pipe中常见的管道操作函数,事实上pipe中的管道操作函数相当的丰富,下面我们来展示其中一些常用的:

二 、pipe中常用的管道操作函数

1.使用traverse()展平嵌套数组

如果你想要将任意嵌套数组结构展平,可以使用traverse()

(
    [1, [2, 3, [4, 5]], 6, [7, 8, [9, [10, 11]]]] | 
    pipe.traverse | 
    Pipe(list)
)

在这里插入图片描述

2.使用dedup()进行顺序去重

如果我们需要对包含若干重复值的数组进行去重,且希望保留原始数据的顺序,则可以使用dedup(),其还支持key参数,类似sorted()中的同名参数,实现自定义去重规则:

(
    [-1, 0, 0, 0, 1, 2, 3] | 
    pipe.dedup |
    Pipe(list)
)
 
(
    [-1, 0, 0, 0, 1, 2, 3] | 
    # 基于每个元素的绝对值进行去重
    pipe.dedup(key=abs) |
    Pipe(list)
)

在这里插入图片描述

3.使用filter()进行值过滤

我们最开始的例子中使用过它,用法就是基于传入的lambda函数对每个元素进行条件判断,并保留结果为True的,与javascript中的filter()方法非常相似:

(
    [1, 4, 3, 2, 5, 6, 8] |
    # 保留大于5的元素
    pipe.filter(lambda x: x > 5) |
    Pipe(list)
)

在这里插入图片描述

4.使用groupby()进行分组运算

这个函数非常实用,其功能相当于管道操作版本的itertools.groupby(),可以帮助我们基于lambda函数运算结果对原始输入数组进行分组,通过groupby()操作后直接得到的结果是分组结果的二元组列表,每个元组的第一个元素是分组标签,第二个元素是分到该组内的各个元素:
在这里插入图片描述
基于此,我们可以衔接很多其他管道操作函数,譬如衔接select()对分组结果进行自定义运算:

在这里插入图片描述

5.使用select()对上一步结果进行自定义遍历运算

这个函数是pipe()中核心的管道操作函数,通过前面的若干例子也能弄明白,它的功能是基于我们自定义的函数,对上一步的运算结果进行遍历运算。
在这里插入图片描述

6.使用sort()进行排序

相当于内置函数sorted()的管道操作版本,同样支持keyreverse参数:
在这里插入图片描述


总结

上述内容足以支撑大部分日常操作需求,你也可以在https://github.com/JulienPalard/Pipe中查看pipe的更多功能介绍。
在这里插入图片描述


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

thinkphp8 多级控制器调用

在使用这个目录的时候正常访问时 http://tp.com/index.php/user2.login/index, 这个多级目录时不允许使用的,想要使用就的使用路由 在route/app.php 里面配置:Route::get(user2/login,user2.Login/index); 第一个参数时外部访问参数,第二个是…

Android权限动态申请(包括悬浮窗)

目录 效果图 一、环境配置 二、新建工具类 三、开始使用 备注(一):用户手动设置权限 手动设置效果图 备注(二):在Fragment中如何调用动态权限申请 备注(三):悬浮窗…

SDL2 显示文字

1.简介 SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字。ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它有美观,放大缩小不变形的优点,因此广泛应用很多场合。 使用ttf库的第一件事要从Windows的…

【leetcode】8.字符串转换整数

题目 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未…

【文末送书】深入浅出嵌入式虚拟机原理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于回溯搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

二维码智慧门牌管理系统升级解决方案:数据可视化助力运营精准决策

文章目录 前言一、升级版二维码智慧门牌管理系统的特点二、数据可视化助力运营精准决策 前言 随着科技的不断进步,传统的门牌管理系统已经无法满足现代社会的需求。为了提高管理效率,减少人力成本,我们引入了升级版的二维码智慧门牌管理系统…

[PyTorch][chapter 62][强化学习-基本概念]

前言: 目录: 强化学习概念 马尔科夫决策 Bellman 方程 格子世界例子 一 强化学习 强化学习 必须在尝试之后,才能发现哪些行为会导致奖励的最大化。 当前的行为可能不仅仅会影响即时奖赏,还有影响下一步奖赏和所有奖赏 强…

如何应对招聘中的职业性格测评?

很多同学听说要做性格测试,第一反应是如何让自己的性格让HR看起来更好....没办法为了顺利入职,咱不能老实作答,因为性格测评搞不好是真刷人的,刷人的(无视你的专业能力和笔试成绩)..... 可是....很多性格测…

eNSP-打开华为USG6000V1防火墙web管理页面方法

一、本地打开防火墙web管理页面 1.先在ensp中启动USG6000V1防火墙,启动后,需要输入原始username和password(username:admin,password:Admin123),并修改原始密码后,才能配…

SQL学习(CTFhub)整数型注入,字符型注入,报错注入 -----手工注入+ sqlmap注入

目录 整数型注入 手工注入 为什么要将1设置为-1呢? sqlmap注入 sqlmap注入步骤: 字符型注入 手工注入 sqlmap注入 报错注入 手工注入 sqlmap注入 整数型注入 手工注入 先输入1 接着尝试2,3,2有回显,而3没有回显…

做一个springboot用户信息模块

目录 用户信息部分 1、获取用户详细信息 前言 代码分析 代码实现 测试 2、更新用户信息 前言 代码实现 测试 3、更新用户头像 前言 代码实现 测试 4、更新用户密码 前言 代码实现 测试 用户信息部分 1、获取用户详细信息 前言 承接上一篇博客登录注册功能…

快速批量去除文件夹名称中多余重复文字!一键轻松优化文件夹命名!

您是否曾经因为文件夹名称中多余重复文字而烦恼?是否因为文件夹重命名而浪费大量时间?现在,我们为您推荐一款全新的文件夹批量改名工具——快速批量去除文件夹名称中多余重复文字,轻松实现文件夹改名优化,让您的整理效…

Leetcode_2:两数相加

题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff…

106.am40刷机(linux)折腾记2-前期的准备工作2-软件使用

最终的目标是刷入firefly的3399的镜像,同时更新内核到linux5.10版本(4.4的内核应该是相同的方法,我目前没有去折腾,暂时不用了)。 1. 平台: rk3399 am40 4g32g 2. 内核:暂无 3. 交叉编译工…

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

macOS文本编辑器 BBEdit 最新 for mac

BBEdit是一款功能强大的文本编辑器,适用于Mac操作系统。它由Bare Bones Software开发,旨在为开发者和写作人员提供专业级的文本编辑工具。 以下是BBEdit的一些主要特点和功能: 多语言支持:BBEdit支持多种编程语言和标记语言&…

jstack java堆栈跟踪工具

jstack java堆栈跟踪工具 1、jstack介绍 jstack(stack trace for java)是java虚拟机自带的一种堆栈跟踪工具。 jstack主要用于生成java虚拟机当前时刻的线程快照,线程快照是当前java虚拟机内每一条线程正在执行的方法 堆栈的集合&#xf…

信息安全工程师软考知识点

文章目录 知识点总结2023软考总结选择题问答题 知识点总结 军用不对外公开的信息系统安全等级至少应该>三级 数据中心的耐火等级不应低于二级 政府网站的信息安全等级原则上不应低于二级第一代交换机以集线器为代表,工作在OSI物理层 第二代交换机以太网交换机&a…

关于论文图表目录和交叉引用的使用小结

目录 1 题注用法 2 交叉引用 最近在写论文,遇到不少Word使用的问题(错误!文档中没有指定样式的文字。) 网上其实也有很多解决方案但我当时还是折腾了几个小时才整出来图目录,以下是针对我目前使用的感觉简明很多的方法。 1 题注用法 1) 假…