首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python相当于java-stream管道

Python相当于java-stream管道
EN

Stack Overflow用户
提问于 2021-08-03 05:57:20
回答 1查看 321关注 0票数 1

我主要用Java编程,我发现对于数据分析,python更方便。我正在寻找一种方法来管道操作,在一种方式,相当于java流。例如,我想做一些类似的事情(我混合了java和python语法)。

代码语言:javascript
复制
(key, value) = Files.lines(Paths.get(path))
   .map(line -> new Angle(line))
   .filter(angle -> foo(angle))
   .map(angle -> (angle, cosine(angle)))
   .max(Comparator.comparing(Pair::getValue)

在这里,我从文件中获取一系列行,将每一行转换为一个Angle对象,通过一些参数过滤角度,然后创建一个配对列表,最后找到最大配对。此外,可能还有多个额外的操作,但重点是,这是一个管道将一个操作的输出传递给下一个操作。

我知道python列表的理解,但是它们似乎仅限于一个"map“和一个"filter”。如果我需要使用理解来传输多个地图,表达式很快就会变得复杂(我需要将一个理解放在另一个理解中)

python中是否有允许在一个命令中添加多个操作的语法结构?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-03 06:09:03

自己实现并不难,例如:

代码语言:javascript
复制
class BasePipe:
    def __init__(self, data):
        self.data = data
    
    def filter(self, f):
        self.data = [d for d in self.data if f(d)]
        return self
    
    def map(self, f):
        self.data = [*map(f, self.data)]
        return self
    
    def __iter__(self):
        yield from self.data
    
    def __str__(self):
        return str(self.data)
    
    def max(self):
        return max(self.data)

    def min(self):
        return min(self.data)

value = (
    BasePipe([1, 2, 3, 4]).
    map(lambda x: x * 2).
    filter(lambda x: x > 4).
    max()
)

并给出了:

代码语言:javascript
复制
8
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68631015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档