3

我有的:

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

我想要的是:

我想摆脱 array = original_array[:] 语句。理想情况下,我会简单地将reduce()中的数组参数替换为original_array[:],但我也需要在 lambda 中使用它。有没有办法 从 lambda中引用数组参数?

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

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

我需要这样的东西:

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

3 回答 3

6

您可以将整个内容包装在另一个 lambda 中:

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

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

于 2012-11-13T20:32:51.487 回答
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)

于 2012-11-13T20:39:54.777 回答
0

尝试:

result = reduce(lambda a,b, array=array: some_function(b,array), array)
于 2012-11-13T20:40:14.843 回答