如何在reduce()中引用整个数组?

时间:2012-11-13 20:28:29

标签: python functional-programming

我有什么:

array = original_array[:]
result = reduce(lambda a,b: some_function(b,array), array)

我想要的是什么:

我想摆脱array = original_array [:]语句。 理想情况下,我只需用original_array [:]替换 reduce()中的 array 参数,但我也需要在lambda中使用它。有没有办法参考 lambda中的 array 参数?

以下是不可接受的解决方案,因为它为每个元素创建一个新的数组副本:

result = reduce(lambda a,b: some_function(b,original_array[:]), original_array[:])

我需要这样的东西:

result = reduce(lambda a,b: some_function(b,reduce_parameter), original_array[:])

3 个答案:

答案 0 :(得分:6)

你可以把整个东西包裹在另一个lambda中:

result = (lambda array: reduce(lambda a,b: some_function(b,array), array))(original_array[:])

但是我认为你的原始解决方案更可取,因为它更具可读性。

答案 1 :(得分:2)

这是一种删除外部lambda的方法

result = reduce(lambda a,b,array=array[:]: some_function(b,array), array)

编辑:糟糕,误读了问题

这当然假设您确实需要复制数组,并且它不足以使用

result = reduce(lambda a,b: some_function(b, array), array)

此外,这是对reduce的错误使用 - 您未使用a参数,因此result保留some_function(array[-1], array)

答案 2 :(得分:0)

尝试:

result = reduce(lambda a,b, array=array: some_function(b,array), array)