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
最后更新于