Python лямбда-сумма диапазона - PullRequest
0 голосов
/ 12 июля 2020

Я хочу написать лямбда-функцию, которая возвращает тот же результат, что и sum(range(101)).

Я пробовал несколько лямбда-функций, но не понимаю, как я могу это реализовать.

Например я пробовал

f=(lambda x: sum(x), x in range(0,101))

я тоже устал a=x in range(0,101) и заменил (lambda x: sum(x))(a).

Можете ли вы объяснить / показать, как я могу реализовать диапазон и сумму в этот пример. Было бы также здорово, если бы вы объяснили мне, почему мое решение неверно, потому что мне нужно выучить это в школе, и я хочу стать лучше. :)

Ответы [ 3 ]

0 голосов
/ 12 июля 2020
a = lambda x : sum(range(1, x))
a(10)
0 голосов
/ 13 июля 2020

Формула Гаусса:

lambda x: (x+1)*(x/2)

Гений математики (Гаусс) вычислил эту. Он работает только для суммирования чисел в последовательности.

Авторекурсия:

lambda x: (
    lambda f: lambda *args: f(f, *args))(  # Hint: see "Y combinator".
        lambda recur, accumulator, x: recur(recur, acumulator+x, x-1)
        if x
        else accumulator
    )(accumulator=0, x=x)

Нет «команд» (если это означает, что мы не можем использовать встроенные команды), только выражения (не операторы).

Это кажется слишком сложным для новичка, и это неестественный способ сделать это в Python. Рекурсия распространяется на другие операции, но может вызвать переполнение стека в Python, если x слишком велико.

0 голосов
/ 12 июля 2020

Для любого значения x:

lambda x: sum(range(x))

Только для 101:

lambda: sum(range(101))

Что касается (lambda x: sum(x), x in range(0,101)), ваше выражение представляет собой кортеж с первым значением как lambda x: sum(x), а второй ссылается на переменную x, которая не существует в области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...