python中的函数式编程-同时使用map()、filter()和sum()- java .stream()等价物?

3b6akqbq  于 2023-02-07  发布在  Python
关注(0)|答案(3)|浏览(158)

我正在学习Python和Java的函数式编程。
我有一些Java代码,可以从一个列表中求出偶数的双精度和。
我想用Python中的函数式编程来做同样的事情(即从列表中找到偶数的double之和)。在一起使用filter()、map()和sum()以及代码可读**方面,什么是好的实践?
我用Python编写的代码(见下文)完成了这项工作,但可读性不强。
谢谢你的帮助!

# JAVA

import java.util.Arrays;
import java.util.List;
public class GFG {
    public static void main(String[] args)
    {
        List<Integer> numbers
            = Arrays.asList(11, 22, 33, 44,
                            55, 66, 77, 88,
                            99, 100);
 
        System.out.println(
            numbers.stream()
                .filter(number -> number % 2 == 0)
                .mapToInt(e -> e * 2)
                .sum());
    }
}

// OUTPUT: 640
# PYTHON 

class GFG:

    @staticmethod
    def main():
        numbers = [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]
        print(sum(map(lambda x: x * 2, (filter(lambda x: x % 2 == 0, numbers)))))
   

GFG.main()

# OUTPUT: 640
nlejzf6q

nlejzf6q1#

sum与生成器表达式一起使用。

sum(x * 2 for x in numbers if x % 2 == 0)
w51jfk4q

w51jfk4q2#

Python可读性较差的原因是mapfilter等在Java中是方法,而在Python中是函数,这意味着在Java中,你可以使用缩进来使所有内容从左到右流畅地阅读。
没有什么特别的理由不能在Python中创建自己的流:

class MyStream:
     def __init__(iterator):
          self.iterator = iterator

     def map(func):
          return MyStream(map(func, self.iterator))
     
     def filter(func):
          return MyStream(filter(func, self.iterator))
     ...

在Python中没有人会这样做,因为列表解析和生成器表达式被认为可读性更强。

tcomlyy6

tcomlyy63#

你可以就另一个类似的问题向我提问。
https://stackoverflow.com/a/75366228/9650284
线程中的其他解决方案也可能对您有所帮助。

相关问题