首页 > 解决方案 > 循环地将操作数列表缩减为单个结果

问题描述

(这是另一个问题的重新整理、自我回答的版本,由于没有很好地提出,该问题已被关闭。)

我有一个整数列表:

numbers = [1, 2, 3, 4, 5, 6]

我的目标是在这些数字上交替应用乘法运算符以获得单个结果。

例如,对于这个输入,结果是

((1 + 2) * 3 + 4) * 5 + 6

减少到 71。本质上,这可以分解为:

t1 =  1 + 2 
t2 = t1 * 3 
t3 = t2 + 4
... 

等等。

奖励:可以推广到两个以上周期性操作的解决方案将受到欢迎。

标签: pythonlistfunctioncyclic

解决方案


这是一个略有不同的答案,避免next在 lambda 函数中使用。

import operator
from itertools import cycle

def apply_cyclic(numbers, functions):
    numbers = iter(numbers)
    functions = cycle(functions)
    result = next(numbers)
    for num, fun in zip(numbers, functions):
        result = fun(result, num)
    result num

print(apply_cyclic([1,2,3,4,5,6], [operator.add, operator.mul]))

推荐阅读