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中使用它们。。。