2015-02-22 2 views
2

есть встраиваемая эквивалент этой функции в Python:Python встроенная функция

def foo(a_func,a_list): 
    if len(a_list)==2: 
     return a_func(*[a_list]) 
    else: 
     return a_func(a_list[0],foo(a_func,a_list[0:])) 

другими словами foo(lambda x,y:x+y,[1,2,3,4]) бы добавить 1+2+3+4 и foo(lambda x,y:x-y,[1,2,3,4]) бы ((1-2)-3)-4 и т.д.

И я знаю вы можете сделать это быстрее и предотвратить переполнение стека (: D), но я думаю, что я помню такую ​​функцию, но понятия не имею, что это за имя и не знаю, что делать с Google.

ответ

2

Опишите reduce() function; в Python 3 он был перемещен в functools module:

Применить функции двух аргументов кумулятивны пунктам последовательности, слева направо, таким образом, чтобы уменьшить последовательность до одного значения. Например, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) вычисляет ((((1+2)+3)+4)+5).

Вы можете, конечно, использовать любой вызываемый; operator module предлагает несколько удобных опций:

>>> from functools import reduce 
>>> import operator 
>>> reduce(operator.add, [1,2,3,4]) 
10 
>>> reduce(operator.sub, [1,2,3,4]) 
-8 
2

Его что это reduce функция для!

Применить функцию двух аргументов кумулятивно пунктов Iterable, слева направо, таким образом, чтобы уменьшить итерацию до одного значения

+0

ah oc. :) спасибо – Kazz

+0

@Kazz приветствую вас! – Kasramvd

Смежные вопросы