前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pipe -- 让你的 Python 代码更简洁

Pipe -- 让你的 Python 代码更简洁

作者头像
数据STUDIO
发布2023-09-04 12:45:00
1800
发布2023-09-04 12:45:00
举报
文章被收录于专栏:数据STUDIO数据STUDIO

mapfilter是Python中的两种高效函数,用于处理可迭代对象。然而,如果你同时使用mapfilter,代码会显得很乱。

如果你能像下面这样使用管道|在一个迭代器上应用多个方法,那不是很好吗?

什么是Pipe?

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

Pipe很受欢迎,因为它使我们的代码在对Python迭代器应用多种方法时看起来更干净。由于Pipe中的函数屈指可数,所以学习Pipe也非常容易。在这篇文章中,云朵君将和大家一起学习这个很酷的方法~

首先需要安装Pipe:

代码语言:javascript
复制
pip install pipe

Where

迭代器中的过滤元素--where

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

Select

将一个函数应用到一个迭代器上—select

select方法与map方法类似。select将一个方法应用于迭代器的每个元素。

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

现在,你可能想知道:如果whereselect的功能与mapfilter相同,我们为什么还需要这些方法? 因为可以使用管道在另一个方法之后插入一个方法。因此,使用管道可以去除嵌套的小括号,使代码更容易阅读。

Chain

迭代序列的链路--chain

处理嵌套的迭代器可能是一件很痛苦的事情。而我们可以使用chain来链接一连串的迭代变量。

尽管应用链式后迭代器的嵌套程度降低了,我们仍然有一个嵌套的列表。要处理一个深度嵌套的列表,可以使用 traverse 来代替。

Traverse

递归展开迭代器--traverse

traverse方法可以用来递归地展开迭代器。因此,你可以用这个方法把一个深度嵌套的列表变成一个一维列表。

把这个方法和select方法整合起来,以获得一个字典的值,并把列表扁平化。

列表中的元素分组

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

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

在上面的代码中,我们使用groupby将数字分组为Even组和Odd组。应用这个方法后的输出看起来像下面这样:

代码语言:javascript
复制
[('Even', <itertools._grouper at 0x7fbea8030550>),
 ('Odd', <itertools._grouper at 0x7fbea80309a0>)]

接下来,我们使用select将一个元组变成一个字典的列表,其键是元组中的第一个元素,值是元组中的第二个元素。

代码语言:javascript
复制
[{'Even': [2, 4, 6, 8]},
 {'Odd': [1, 3, 5, 7, 9]}]

为了只获得大于2的值,我们可以在选择方法中加入where方法:

请注意,输出中不再有2和1。

Dedup

使用一个键来重复取值--dedup

dedup方法删除列表中的重复部分。

这听起来可能没什么意思,因为set方法可以做同样的事情。然而,这种方法更加灵活,因为它使你能够使用一个键获得独特的元素。

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

现在,把这个方法与 selectwhere 结合起来,得到一个有重复键和 None 值的字典的值。

在上面的代码中,我们:

  • 移除同名的元素
  • 获得count的值
  • 只选择整数的值。

在几行代码中,我们可以将多个方法应用于一个迭代器,同时仍然保持代码的简洁。

总结

本文中,云朵君和大家一起学会了如何使用管道来保持你的代码的简洁和简短。我希望这篇文章能给你带来知识,把对迭代器的复杂操作变成一行简单的代码。

参考资料

[1]

Pipe: https://github.com/JulienPalard/Pipe

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Pipe?
  • Where
  • Select
  • Chain
  • Traverse
  • 列表中的元素分组
  • Dedup
  • 总结
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档