Как использовать уменьшить / карту / список понимания для суммирования?

У меня есть уравнение выше, и я хочу вычислить сумму, подчеркнутую красным, и [ρ0,ρ1,ρ2,...,ρN] - это список для начала.

Цикл for, безусловно, может решить проблему. Но мне было интересно, есть ли более лаконичный питонический стиль для этого. Я попытался уменьшить функцию, но кажется, что она работает только на прямое суммирование или умножение списка. Как работать с суммированием, как показано выше?

3 ответа

Я думаю, что вы ищете это:

sum((x-y)**2 for (x,y) in izip(a, a[1:]))

для массива a,
izip(a, a[1:]) позволяет получить доступ к i'th и i+1'th элементам массива одновременно.

Вероятно, было бы лучше использовать numpy для этого, но в чистом питоне, вы можете суммировать выражение генератора. например

>>> sum(i**2 for i in range(10))
285

Для вашего второго семестра, просто гнездовые суммирования:

>>> sum(sum(i*j for i in range(10)) for j in range(10))
2025

где моя i*j термин - это ваша функция для расчета произведения ваших rho-разностей и косинуса.

В качестве альтернативы вы можете попробовать написать рекурсивную функцию

def listsum(numList):
   if len(numList) == 2:
        return math.pow(numList[0] - numList[1], 2)
   else:
        return math.pow(numList[0] - numList[1], 2) + listsum(numList[1:])

И называть это

listsum([1,3,5,7,9])
Другие вопросы по тегам