我有什么:
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[:])
答案 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)