Как использовать уменьшить / карту / список понимания для суммирования?
У меня есть уравнение выше, и я хочу вычислить сумму, подчеркнутую красным, и [ρ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])