Мне нужно написать функцию, которая берет список чисел и умножает их вместе. Пример:
[1,2,3,4,5,6]
даст мне 1*2*3*4*5*6
. Я мог бы действительно использовать вашу помощь.
python
list
multiplication
user1897814
источник
источник
lambda
занял в среднем 0,02 с / 1000 повторений, в то время какoperator.mul
в среднем 0,009 с / 1000 повторений, чтоoperator.mul
на порядок быстрее.operator.mul
идет прямо к C.math.prod([1,2,3,4,5,6])
. (требуется импорт конечно)Ты можешь использовать:
Смотрите
reduce
иoperator.mul
документацию для объяснения.Вам нужна
import functools
строка в Python 3+.источник
reduce()
функция была удалена из глобального пространства имен и помещена вfunctools
модуль. Так что в python3 вам нужно сказатьfrom functools import reduce
.lambda x,y: x*y
также работает вместоoperator.mul
Я бы использовал
numpy.prod
для выполнения задачи. Увидеть ниже.источник
result = np.prod(mylist)
numpy.int32
как указано выше. 2) Для небольших списков это будет значительно медленнее, поскольку NumPy необходимо выделить массив (актуально, если повторяется часто)np.prod(np.array(range(1,21)))
reduce
.Если вы хотите избежать импорта чего-либо и избежать более сложных областей Python, вы можете использовать простой цикл for
источник
Начиная
Python 3.8
,.prod
функция была включена вmath
модуль в стандартной библиотеке:Метод возвращает произведение
start
значения (по умолчанию: 1) на число итерируемых чисел:Если итерация пуста, это приведет к
1
(илиstart
значению, если оно предоставлено).источник
Вот некоторые измерения производительности моей машины. Это актуально в случае, если это выполняется для небольших входов в длительном цикле:
Полученные результаты:
Вы можете видеть, что Numpy немного медленнее при меньших входах, так как он выделяет массив перед выполнением умножения. Также следите за переполнением в Numpy.
источник
multiply_functools
иmultiply_numpy
отягощено того , чтобы посмотреть наnp
,functools
иoperator
глобал, с последующими атрибутами поиском. Не могли бы вы перейти на местных жителей?_reduce=functools.reduce,
_mul = operator.mul` в сигнатуре функции, затемreturn _reduce(_mul, iterable)
в теле и т. д.np.prod()
параметр запускается быстрее всего при 100 или более элементах.Мне лично нравится это для функции, которая умножает все элементы общего списка:
Он компактен, использует простые вещи (переменную и цикл for) и выглядит для меня интуитивно понятным (похоже, что я думаю о проблеме, просто возьми одну, умножь ее, затем умножь на следующую и так далее! )
источник
for i in n:
Тогда почему нетtotal *= i
? не будет ли это намного проще?Простой способ:
источник
np.prod(your_Array)
Numpy
имеетprod()
функцию, которая возвращает произведение списка, или, в данном случае, так как оно пустое, это произведение массива по заданной оси:... или вы можете просто импортировать
numpy.prod()
:источник
Нашел этот вопрос сегодня, но я заметил, что у него нет случая, когда есть
None
в списке. Итак, полное решение будет:В случае сложения имеем:
источник
источник
*
, так что eval распознает это как мультипликативный. Интересно, как обстоят дела с этим, особенно по сравнению с другими решениямиЯ хотел бы это следующим образом:
источник
Это мой код:
результат: ('1 * 1 * 2 * 3 * 4', 24)
источник
Как насчет использования рекурсии?
источник
Мое решение:
источник
'' 'единственный простой способ понять логику, используемую для цикла' ''
Lap = [2,5,7,7,9] x = 1 для i на круге: x = i * x print (x)
источник
Это очень просто, ничего не импортировать. Это мой код Это определит функцию, которая умножает все элементы в списке и возвращает их продукт.
источник