我有一个函数,它将从使用functools中受益。减少它的行为类似于
import functools
def add(total, val, max_index, index):
if index > max_index:
return total
else:
return total + val
arr = [1,2,3,4,5,6,7,8]
functools.reduce(functools.partial(add, max_index=5), arr, 0)
如何将arr
中val
的索引传递到函数中,还是不可能我曾考虑过使用全局变量来跟踪指数,但当然宁愿不使用
顺便说一句,我的函数是用于一个比len 8 阵列大得多的阵列
您总是可以传递enumerate(arr)
,它将元素X_i的任何可迭代元素转换为元素(i,X_i)
的另一个可迭代元素。
然后该函数将需要将";值";它将(现在是一个2元组(接收为索引和值。
示例:
import functools
def add(total, index_val, max_index):
index, val = index_val
if index > max_index:
return total
else:
return total + val
arr = [1,2,3,4,5,6,7,8]
res = functools.reduce(functools.partial(add, max_index=5), enumerate(arr,0), 0)
print(res)
Pythonreduce
函数从全局命名空间中删除到functools,一般指令是使用列表理解。使用列表理解,我会这样做:
arr = [1,2,3,4,5,6,7,8]
max_index = 5
# 0-based index
print( sum([val for index, val in enumerate(arr,0) if index<=max_index]) )
# output is 21