python_pipe包管道包学习
python pipe包管道包学习
1 | from pipe import * |
构造你自己的pipe管道函数
1
2
3
4
5
6
7 # 构造你自己的pipe管道函数
stdout = Pipe(lambda x: sys.stdout.write(str(x)))
select = Pipe(lambda iterable, pred: (pred(x) for x in iterable))
# 或者
def stdout(x):
sys.stdout.write(str(x))
删除重复值
1
2
3
4
5
6
7 # 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() 对列表实现分组计算
1
2
3
4
5
6 # 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
4
5
6
7
8
9
10
11 # 加法
[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映射操作
1
2
3 # select函数,相当于map映射操作
[1,3,5] | select(lambda x:float(x +1)) |as_list
Out[20]: [2.0, 4.0, 6.0]
聚合函数
1
2
3 # 聚合函数,可以使用lambda函数自定义
(1, 2, 3, 4, 5, 6, 7, 8, 9) | aggregate(lambda x, y: x + y)
Out[21]: 45
筛选和过滤
1
2
3
4
5
6
7 # 筛选和过滤
[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生成器的长度
1
2
3
4
5 # 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操作
1
2
3 # 相当于flatmap
[[1, 2], [3, 4], [5]] | chain |as_list
Out[31]: [1, 2, 3, 4, 5]
两个列表实现zip函数
1
2
3 # 两个列表实现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
1
2
3
4
5
6
7 # 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'
索引截取数组元素
1
2
3
4
5 # 使用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()实现
1
2
3
4
5
6
7
8
9
10
11 # 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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 兼一书虫!
评论
TwikooValine