Python中的inject()相当于什么?

时间:2009-07-01 19:36:42

标签: python functional-programming

在Ruby中,我习惯使用Enumerable#inject来查看列表或其他结构,并回过头来了解一下。例如,

[1,3,5,7].inject(true) {|allOdd, n| allOdd && n % 2 == 1}

确定数组中的每个元素是否都是奇数。在Python中完成同样的事情的适当方法是什么?

3 个答案:

答案 0 :(得分:24)

要确定每个元素是否都是奇数,我会使用all()

def is_odd(x): 
    return x%2==1

result = all(is_odd(x) for x in [1,3,5,7])

但是,一般情况下,Ruby的inject最像Python的reduce()

result = reduce(lambda x,y: x and y%2==1, [1,3,5,7], True)
在这种情况下,

all()是首选,因为一旦找到类似False的值,它就能够转义循环,而reduce解决方案则必须处理整个列表回答。

答案 1 :(得分:7)

听起来像Python中的reduce或来自Haskell的fold(r|l)'?'

reduce(lambda x, y: x and y % == 1, [1, 3, 5])

答案 2 :(得分:4)

我认为你可能想要使用all,这不如injectreduce是等效于inject的Python。

all(n % 2 == 1 for n in [1, 3, 5, 7])