python
  • Introduction
  • python多进程
  • python多线程
  • python协程
  • python异步编程
  • python装饰器
  • python魔法函数
  • python元编程
  • collections模块
  • logging模块
  • 数据库相关操作
  • RegularExpressionOP
  • 文件和目录访问
  • 枚举类Enum
  • python基础知识
  • pythonic的几个办法
  • pandas小记
  • numpy小记
  • python_pipe包管道包学习
  • Python增强提案PEP
  • python进阶问题
  • python性能优化模块
  • python网络编程
  • Anaconda开发环境
  • elementary_os记录
  • Jupyter使用教程
  • Kafka基本安装和使用
  • ML一元函数微积分
由 GitBook 提供支持
在本页
  • python pipe包管道包学习
  • 构造你自己的pipe管道函数
  • 删除重复值
  • groupby() 对列表实现分组计算
  • 求和和平均数
  • select函数,相当于map映射操作
  • 聚合函数
  • 筛选和过滤
  • take前几个元素和count生成器的长度
  • flatmap操作
  • 两个列表实现zip函数
  • 指定函数排序并选出max
  • 索引截取数组元素
  • any()和all()实现

这有帮助吗?

python_pipe包管道包学习


python pipe包管道包学习

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

from pipe import *

# 此处不是太理解
[1, 2, 3, 4, 5] | tee | as_list
1
2
3
4
5
Out[32]: [1, 2, 3, 4, 5]

# 将生成器转换成list列表
[1, 2, 3, 4, 5, 6] | as_list
Out[34]: [1, 2, 3, 4, 5, 6]

    
# Like Python's built-in "reversed" primitive.
[1, 2, 3] | reverse | concat
Out[52]: '3, 2, 1'
    
# Returns index of value in iterable 检索值
# 输入value start stop
[1,2,3,2,1] | index(value=2,start=2,stop=4)
Out[53]: 3
[1,2,3,2,1] | index(3)
Out[54]: 2

构造你自己的pipe管道函数

# 构造你自己的pipe管道函数
stdout = Pipe(lambda x: sys.stdout.write(str(x)))
select = Pipe(lambda iterable, pred: (pred(x) for x in iterable))
# 或者
@Pipe
def stdout(x):
    sys.stdout.write(str(x))

删除重复值

# dedup() Deduplicate values删除重复的值
[1,1,2,2,3,3,1,2,3] | dedup |as_list
Out[50]: [1, 2, 3]

# 删除连续的且重复的值
[1,1,2,2,3,3,1,2,3] | uniq | as_list
Out[51]: [1, 2, 3, 1, 2, 3]

groupby() 对列表实现分组计算

# groupby() 对列表实现分组计算
(1, 2, 3, 4, 5, 6, 7, 8, 9) | groupby(lambda x: x % 2 and "Even" or "Odd") | select(lambda x: "%s : %s" % (x[0], (x[1] | concat(', ')))) | concat(' / ')
Out[46]: 'Even : 1, 3, 5, 7, 9 / Odd : 2, 4, 6, 8'
    
[5, -4, 3, -2, 1] | sort(key=abs) | concat
Out[49]: '1, -2, 3, -4, 5'

求和和平均数

# 加法
[1,2,3] | add
Out[17]: 6
    
# 平均数,使用自定义函数,必须在函数前面加上@pipe装饰
[1, 2, 3] | select(lambda x: x * x) |average
Out[30]: 4.666666666666667
    
# 平均数
[1, 2, 3, 4, 5, 6] | average
Out[35]: 3.5

select函数,相当于map映射操作

# select函数,相当于map映射操作
[1,3,5] | select(lambda x:float(x +1)) |as_list
Out[20]: [2.0, 4.0, 6.0]

聚合函数

# 聚合函数,可以使用lambda函数自定义
(1, 2, 3, 4, 5, 6, 7, 8, 9) | aggregate(lambda x, y: x + y)
Out[21]: 45

筛选和过滤

# 筛选和过滤
[1, 2, 3] | where(lambda x: x % 2 == 0) | as_list
Out[24]: [2]
[1, 2, 3, 4] | take_while(lambda x: x < 3) | concat
Out[25]: '1, 2'
[1, 2, 3, 4] | where(lambda x: x < 3) | concat
Out[26]: '1, 2'

take前几个元素和count生成器的长度

# take前几个元素和count生成器的长度
[1,2,3]|take(2) |as_list |where(lambda x : x ==2) |as_list |count
Out[27]: 1
[1,2,3]|count
Out[28]: 3

flatmap操作

# 相当于flatmap
[[1, 2], [3, 4], [5]] | chain |as_list
Out[31]: [1, 2, 3, 4, 5]

两个列表实现zip函数

# 两个列表实现zip函数
(1, 2, 3, 4, 5, 6, 7, 8, 9) | izip([9, 8, 7, 6, 5, 4, 3, 2, 1]) | concat
Out[38]: '(1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)'

指定函数排序并选出max

# max()按照key中的指定的函数来排序,然后筛选出max的函数
('aa', 'b', 'fosdfdfo', 'qwerty', 'bar', 'zoog') | max(key=len)
Out[43]: 'fosdfdfo'
('aa', 'b', 'foo', 'qwerty', 'bar', 'zoog') | max()
Out[44]: 'zoog'
('aa', 'b', 'foo', 'qwerty', 'bar', 'zoog') | max
Out[45]: 'zoog'

索引截取数组元素

# 使用islice截取从下表2到7,按照索引截取数组中的元素
(1, 2, 3, 4, 5, 6, 7, 8, 9) | islice(2, 8) | concat
Out[36]: '3, 4, 5, 6, 7, 8'
(1, 2, 3, 4, 5, 6, 7, 8, 9) | islice(0,1) |as_list
Out[37]: [1]

any()和all()实现

# any(),只要存在一个就返回true
(1, 3, 5, 6, 7) | any(lambda x: x >= 7)
Out[39]: True
(1, 3, 5, 6, 7) | any(lambda x: x > 7)
Out[40]: False

# all(),必须全部满足才会返回true
(1, 3, 5, 6, 7) | all(lambda x: x < 7)
Out[41]: False
(1, 3, 5, 6, 7) | all(lambda x: x <= 7)
Out[42]: True
上一页numpy小记下一页Python增强提案PEP

最后更新于1年前

这有帮助吗?

Page cover image