在python中使用functools.reduce时,是否有在可迭代对象中获取值索引的方法



我有一个函数,它将从使用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)

如何将arrval的索引传递到函数中,还是不可能我曾考虑过使用全局变量来跟踪指数,但当然宁愿不使用

顺便说一句,我的函数是用于一个比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

相关内容

  • 没有找到相关文章

最新更新