Skip to content

Latest commit

 

History

History
208 lines (108 loc) · 8.61 KB

write-clean-python-code-pipes.md

File metadata and controls

208 lines (108 loc) · 8.61 KB

使用管道编写干净的 Python 代码

原文:www.kdnuggets.com/2021/12/write-clean-python-code-pipes.html

Khuyen Tran,数据科学实习生

动机

mapfilter 是两个高效的 Python 方法,用于处理可迭代对象。然而,如果同时使用 mapfilter,代码可能会显得凌乱。


我们的前三名课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业的快车道。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求


作者提供的图片

如果你可以像下面这样使用管道 | 来对可迭代对象应用多个方法,那不是很好吗?

作者提供的图片

Pipe 库允许你做到这一点。

什么是 Pipe?

Pipe 是一个 Python 库,允许你在 Python 中使用管道。一个管道 (|) 将一个方法的结果传递给另一个方法。

我喜欢使用管道,因为当对 Python 可迭代对象应用多个方法时,它使我的代码看起来更简洁。由于管道只提供少量的方法,它也非常容易学习。在这篇文章中,我将展示一些我认为最有用的方法。

要安装 Pipe,请输入:

pip install pipe

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

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

作者提供的图片

Select — 对可迭代对象应用函数

select 方法类似于 map 方法。select 将一个方法应用到可迭代对象的每个元素上。

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

作者提供的图片

现在,你可能会想:既然 whereselect 的功能与 mapfilter 相同,我们为什么还需要它们呢?

因为你可以使用管道将一个方法接在另一个方法后面。因此,使用管道可以去除嵌套的括号,使代码更具可读性。

作者提供的图片

展开可迭代对象

chain — 链接一系列可迭代对象

处理嵌套的可迭代对象可能很麻烦。幸运的是,你可以使用 chain 来连接一系列可迭代对象。

作者提供的图片

即使在应用了chain之后,可迭代对象的嵌套程度有所减少,我们仍然得到一个嵌套列表。要处理深度嵌套的列表,我们可以改用traverse

traverse — 递归展开可迭代对象

traverse方法可以用来递归展开可迭代对象。因此,你可以使用这种方法将深度嵌套的列表转化为平坦的列表。

图片由作者提供

让我们将这种方法与select方法结合,获取字典的值并展平列表。

图片由作者提供

相当酷!

列表中的元素分组

有时,使用某个函数对列表中的元素进行分组可能会很有用。这可以通过groupby方法轻松实现。

为了查看这种方法的工作原理,让我们将一个数字列表转化为一个字典,该字典根据数字是偶数还是奇数进行分组。

图片由作者提供

在上面的代码中,我们使用groupby将数字分组到Even组和Odd组。应用这种方法后的输出如下:

[('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方法:

图片由作者提供

请注意,输出中不再包含21

dedup — 使用键去重

dedup方法用于移除列表中的重复项。

图片由作者提供

这可能听起来不那么有趣,因为set方法也能实现相同的功能。然而,这种方法更为灵活,因为它允许你通过键来获取唯一元素。

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

图片由作者提供

现在,让我们将这种方法与selectwhere结合,以获取具有重复键和None值的字典的值。

图片由作者提供

在上面的代码中,我们:

  • 移除具有相同name的项

  • 获取count的值

  • 仅选择整数值。

通过几行代码,我们可以对一个可迭代对象应用多种方法,同时保持代码的简洁。很酷,不是吗?

结论

恭喜!你刚刚学会了如何使用 pipe 保持代码的整洁和简短。希望这篇文章能让你掌握将复杂的迭代操作转化为一行简单代码的知识。

欢迎在此处玩转并分叉本文的源代码:

Data-science/pipe.ipynb at master · khuyentran1401/Data-science

我喜欢撰写基础数据科学概念,并玩弄不同的算法和数据科学工具。你可以通过 LinkedInTwitter 与我联系。

如果你想查看我撰写的所有文章的代码,请给 这个仓库 点个星。关注我的 Medium,以获取最新的数据科学文章,如下所示:

Python 清洁代码: 使你的 Python 函数更具可读性的 6 个最佳实践

4 个 pre-commit 插件以自动化 Python 代码审查和格式化

Pydash: 一个包含缺失 Python 工具的厨房水槽

3 个 Python 技巧来自动读取、创建和运行多个文件

个人简介: Khuyen Tran 是一位多产的数据科学作家,撰写了 一系列有用的数据科学主题,包括代码和文章。Khuyen 目前正在寻找一份机器学习工程师、数据科学家或开发者推广角色的职位,特别是在 2022 年 5 月之后的湾区,如果你需要她的技能,请联系她。

原文。经许可转载。

相关:

  • Python 序列的 5 个高级技巧

  • 初学者的端到端机器学习指南

  • 生成 Python 的电子表格: Mito JupyterLab 扩展

更多相关话题