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

wol*_*lak 14 python functional-programming

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

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

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

Tri*_*ych 24

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

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

result = all(is_odd(x) for x in [1,3,5,7])
Run Code Online (Sandbox Code Playgroud)

但是,一般来说,Ruby inject最像Python reduce():

result = reduce(lambda x,y: x and y%2==1, [1,3,5,7], True)
Run Code Online (Sandbox Code Playgroud)

all()在这种情况下是首选,因为它一旦找到类似False值就能够转义循环,而reduce解决方案必须处理整个列表才能返回答案.

  • 请注意,Python 2中的内置`reduce()`已移至[`functools.reduce()`](https://docs.python.org/3.0/library/functools.html#functools.reduce)在Python 3中. (4认同)

Den*_*gan 7

听起来像reducePython或fold(r|l)'?'Haskell.

reduce(lambda x, y: x and y % == 1, [1, 3, 5])
Run Code Online (Sandbox Code Playgroud)