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

Python 如何在reduce()中引用整个数组?,python,functional-programming,Python,Functional Programming,我所拥有的: array = original_array[:] result = reduce(lambda a,b: some_function(b,array), array) 我想要的是: 我想去掉array=original_array[:]语句。 理想情况下,我只需将reduce()中的数组参数替换为原始的_array[:],但我也需要在lambda中使用它。有没有办法参考 lambda中的数组参数 以下是不可接受的解决方案,因为它会为每个元素创建一个新的数组副本: result

我所拥有的:

array = original_array[:]
result = reduce(lambda a,b: some_function(b,array), array)
我想要的是:

我想去掉array=original_array[:]语句。 理想情况下,我只需将reduce()中的数组参数替换为原始的_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[:])

你可以用另一个lambda来包装整个过程:

result = (lambda array: reduce(lambda a,b: some_function(b,array), array))(original_array[:])
但在我看来,您的原始解决方案更可取,因为它更具可读性。

这里有一种删除外部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
保留
某些函数(数组[-1],数组)
请尝试:

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

你的
函数对数组做了什么?另外,您为什么要摆脱
array=original_array[:]
?为什么?如果您需要复制列表,也可以这样做。请注意,我认为
list(original\u list)
original\u list[:]
更清晰,因为它是浅拷贝。您的
有什么功能修改列表吗?因为
reduce
不会。。。因此,在这种情况下,您不需要复制。另外,数组和列表是不同的东西,我真的希望人们在谈到Python时不要混淆这两个术语。参数
a
会发生什么情况?你真的在做减价吗?也许您尝试了错误的算法。这在一个普通的for循环中会是什么样子?+1,我删除了我的答案,因为我没有想到这一点,也不是很疯狂,但它仍然不可读,我完全同意你最后的评论——你不应该在原始版本上这么做。@Lattyware我之所以想到它,是因为我多次滥用多链lambda,主要是在交互式shell中,当时我懒得为一次性任务定义函数:)这是一种聪明的小方法,然而,我并不反对兰博达斯的想法。给我一个
def
一周中的任何一天。+1,因为它可能不可读,但它确实很酷:)
original_array
应该是
array
这里很好地使用了默认参数,我总是忘了你也可以在lambdas中使用它们。。。