у меня есть очень длинный список (из больших чисел), скажем, например:Python3 как создать список частичных произведений
a=[4,6,7,2,8,2]
Мне нужно, чтобы получить этот результат:
b=[4,24,168,336,2688,5376]
где каждый b[i]=a[0]*a[1]...*a[i]
Я пытаюсь сделать это рекурсивно следующим образом:
b=[4] + [ a[i-1]*a[i] for i in range(1,6)]
но (неправильно) результат: [4, 24, 42, 14, 16, 16]
Я не хочу, чтобы вычислить все продукты каждый раз, мне нужен эффективный способ (если это возможно), потому что список очень длинный
на данный момент это работает для меня:
b=[0]*6
b[0]=4
for i in range(1,6): b[i]=a[i]*b[i-1]
, но это слишком медленно. Есть идеи? Можно ли избежать «для» или ускорить его другим способом?
Спасибо за ответ. Хорошо для сложности, но как насчет реализации python? Есть лучший способ (карта или такие вещи), которые могли бы ускорить вычисления? – arulbero
@arulbero нет, это, вероятно, самый быстрый, который вы можете получить. Карты в Python лучше всего работают со встроенными модулями, потому что они частично реализованы на языках C и других языках низкого уровня. Если вы действительно хотите ** лучшую ** производительность, вы можете написать этот цикл в Cython (сочетание Python и C), но это было бы излишним - этот алгоритм достаточно хорош – Leva7
@arulbero, но проверьте редактирование, на самом деле способ получить небольшой выигрыш – Leva7