Python中inject()的等效方法是什么?

17 投票
3 回答
7370 浏览
提问于 2025-04-15 12:37

在Ruby中,我习惯使用Enumerable#inject这个方法来遍历一个列表或其他结构,并得出一些结论。例如,

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

我可以用它来判断数组中的每个元素是否都是奇数。那么在Python中,应该用什么方法来实现同样的功能呢?

3 个回答

4

我觉得你可能想用 all,因为它比 inject 更简单一些。不过,reduce 在 Python 里是和 inject 相对应的。

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

听起来像是Python中的reduce函数,或者Haskell中的fold(r|l)

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

要判断每个元素是否都是奇数,我会使用 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 的方法则需要处理完整个列表才能给出结果。

撰写回答