- Как я могу умножить все элементы в списке вместе с Python?
- Мое решение для умножения элементов в кортеже или списке
- Методы и способы вычисления произведения элементов списка в Python
- Простой подход: использование цикла for
- Использование функции reduce из модуля functools
- Использование библиотеки NumPy
- Заключение
- Нахождение произведения двух чисел с использованием рекурсии
- Решение задачи
- Исходный код
- Объяснение работы программы
- Результаты работы программы
Как я могу умножить все элементы в списке вместе с Python?
Мне нужно написать функцию, которая принимает
a список чисел и умножает их вместе. Пример:
[1,2,3,4,5,6] даст мне 1*2*3*4*5*6 . Я действительно могу использовать вашу помощь.
Python 3: используйте functools.reduce :
>>> from functools import reduce >>> reduce(lambda x, y: x*y, [1,2,3,4,5,6]) 720
Python 2: используйте reduce :
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6]) 720
Для совместимости с 2 и 3 используйте pip install six , затем:
>>> from six.moves import reduce >>> reduce(lambda x, y: x*y, [1,2,3,4,5,6]) 720
import operator import functools functools.reduce(operator.mul, [1,2,3,4,5,6], 1)
Смотрите reduce и operator.mul документация для объяснения.
Вам нужна строка import functools в Python 3 +.
Я бы использовал numpy.prod для выполнения задачи. См. Ниже.
import numpy as np mylist = [1, 2, 3, 4, 5, 6] result = np.prod(np.array(mylist))
Если вы хотите избежать импорта чего-либо и избежать более сложных областей Python, вы можете использовать простой цикл
product = 1 # Don't use 0 here, otherwise, you'll get zero # because anything times zero will be zero. list = [1, 2, 3] for x in list: product *= x
Мне лично это нравится для функции, которая объединяет все элементы общего списка:
def multiply(n): total = 1 for i in range(0, len(n)): total *= n[i] print total
Он компактный, использует простые вещи (переменную и цикл for) и чувствует себя интуитивно понятным для меня (похоже, как я думаю об этой проблеме, просто возьмите ее, умножьте ее, затем умножьте на следующую и и так далее!)
Вот некоторые измерения производительности от моей машины. Относится к случаю, если это выполняется для небольших входов в длительном цикле:
import functools, operator, timeit import numpy as np def multiply_numpy(iterable): return np.prod(np.array(iterable)) def multiply_functools(iterable): return functools.reduce(operator.mul, iterable) def multiply_manual(iterable): prod = 1 for x in iterable: prod *= x return prod sizesToTest = [5, 10, 100, 1000, 10000, 100000] for size in sizesToTest: data = [1] * size timerNumpy = timeit.Timer(lambda: multiply_numpy(data)) timerFunctools = timeit.Timer(lambda: multiply_functools(data)) timerManual = timeit.Timer(lambda: multiply_manual(data)) repeats = int(5e6 / size) resultNumpy = timerNumpy.timeit(repeats) resultFunctools = timerFunctools.timeit(repeats) resultManual = timerManual.timeit(repeats) print(f'Input size: 7d> Repeats: 8d> Numpy: , Functools: , Manual: ')
Input size: 5 Repeats: 1000000 Numpy: 4.670, Functools: 0.586, Manual: 0.459 Input size: 10 Repeats: 500000 Numpy: 2.443, Functools: 0.401, Manual: 0.321 Input size: 100 Repeats: 50000 Numpy: 0.505, Functools: 0.220, Manual: 0.197 Input size: 1000 Repeats: 5000 Numpy: 0.303, Functools: 0.207, Manual: 0.185 Input size: 10000 Repeats: 500 Numpy: 0.265, Functools: 0.194, Manual: 0.187 Input size: 100000 Repeats: 50 Numpy: 0.266, Functools: 0.198, Manual: 0.185
Вы можете видеть, что Numpy немного медленнее при меньших входах, поскольку он выделяет массив перед выполнением умножения. Также следите за переполнением в Numpy.
import numpy as np np.exp(np.log(your_array).sum())
Начиная с Python 3.8 , функция prod была включена в модуль math в стандартной библиотеке:
который возвращает произведение значения start (по умолчанию: 1), умноженное на итерируемое число:
import math math.prod([1, 2, 3, 4, 5, 6]) # 720
Обратите внимание, что если итерация пуста, будет получено значение 1 (или значение start , если оно предусмотрено).
Нашел этот вопрос сегодня, но я заметил, что он не имеет случая, когда в списке есть None . Таким образом, полным решением будет:
from functools import reduce a = [None, 1, 2, 3, None, 4] print(reduce(lambda x, y: (x if x else 1) * (y if y else 1), a))
В случае сложения мы имеем:
print(reduce(lambda x, y: (x if x else 0) + (y if y else 0), a))
nums = str(tuple([1,2,3])) mul_nums = nums.replace(',','*') print(eval(mul_nums))
Я хотел бы это следующим образом:
def product_list(p): total =1 #critical step works for all list for i in p: total=total*i # this will ensure that each elements are multiplied by itself return total print product_list([2,3,4,2]) #should print 48
def product_list(list_of_numbers): xxx = 1 for x in list_of_numbers: xxx = xxx*x return xxx print(product_list([1,2,3,4]))
результат: (‘1 * 1 * 2 * 3 * 4’, 24)
var=1 def productlist(number): global var var*=number list(map(productlist,[1,2,4])) print(var)
Вы можете сделать это с помощью карты
Мое решение для умножения элементов в кортеже или списке
a = 140,10 val = 1 for i in a: val *= i print(val)
def multiply(numbers): a = 1 for num in numbers: a *= num return a pass
Numpy имеет функцию prod, которая возвращает произведение списка, или, в данном случае, так как это numpy, технически это произведение массива по заданной оси.
import numpy a = [1,2,3,4,5,6] b = numpy.prod(a)
другой просто играет на том, как вы импортируете:
from numpy import prod a = [1,2,3,4,5,6] b = prod(a)
def multiply(numbers): total = numbers[0] for num in numbers: total *= num return total
Как насчет использования рекурсии?
def multiply(lst): if len(lst) > 1: return multiply(lst[:-1])* lst[-1] else: return lst[0]
Это очень просто, ничего не импортировать. Это мой код Это определит функцию, которая умножает все элементы в списке и возвращает их продукт.
def myfunc(lst): multi=1 for product in lst: multi*=product return product
Методы и способы вычисления произведения элементов списка в Python
Списки — это основная структура данных в Python, и они встречаются практически в каждом проекте. В этой статье мы рассмотрим, как вычислить произведение всех элементов списка в Python.
Простой подход: использование цикла for
Наиболее простым и понятным способом вычисления произведения всех элементов списка является использование цикла for . Вот базовый код для этого:
my_list = [1, 2, 3, 4, 5] product = 1 for num in my_list: product *= num print(product) #120
Использование функции reduce из модуля functools
Модуль functools в Python содержит функцию reduce() , которая позволяет применить функцию к каждому элементу списка таким образом, чтобы получить одно единственное значение. В нашем случае мы можем использовать reduce() для вычисления произведения всех элементов списка:
from functools import reduce import operator my_list = [1, 2, 3, 4, 5] product = reduce(operator.mul, my_list) print(product) #120
Обратите внимание, что мы используем operator.mul в качестве функции для reduce() . Эта функция выполняет операцию умножения.
Использование библиотеки NumPy
Если вы работаете с числовыми данными, возможно, вы уже знакомы с библиотекой NumPy . Эта библиотека предоставляет множество функций для работы с числовыми данными, включая функцию prod() , которая вычисляет произведение элементов массива:
import numpy as np my_list = [1, 2, 3, 4, 5] product = np.prod(my_list) print(product) #120
Заключение
Вычисление произведения элементов списка является общей задачей в Python. Мы рассмотрели несколько различных подходов, включая использование цикла for , функции reduce() из модуля functools и функции prod() из библиотеки NumPy . Каждый из этих подходов имеет свои собственные преимущества и может быть наиболее подходящим в зависимости от конкретной ситуации.
Стоит также помнить о важности обработки исключений при работе с числовыми данными. В Python предусмотрено множество различных исключений, которые могут возникнуть при выполнении математических операций, и правильная их обработка позволяет избежать ошибок и неожиданного поведения программы.
Наконец, хотя этот материал фокусировался на вычислении произведения элементов списка, принципы и методы, которые мы здесь обсудили, могут быть применены и к другим агрегатным операциям. Например, вы могли бы использовать похожий подход для вычисления суммы, минимума или максимума элементов списка.
Глобальные переменные и global в Python
Изучаем метод replace() в Python: простой способ замены подстрок
Как использовать метод upper() в Python для преобразования текста в верхний регистр
Однострочные и многострочные комментарии в Python + рекомендации использования
Основные методы перебора списка в Python
Как использовать метод keys() для словарей в Python
Нахождение произведения двух чисел с использованием рекурсии
Программа принимает на вход два числа и при помощи рекурсии находит их произведение.
Решение задачи
- Принимаем на вход два числа и записываем их в отдельные переменные.
- Передаем эти переменные в качестве аргументов в рекурсивную функцию.
- В начале работы функции проверяем, является ли первый аргумент меньше второго. Если является, то вызываем данную функцию вновь, меняя аргументы местами.
- В качестве базового условия рекурсии принимаем равенство 0 второго аргумента функции (меньшего). Пока второй аргумент не равен 0 , функция возвращает сумму первого аргумента и рекурсивный вызов самой себя, где второй аргумент уменьшается на 1 .
- Когда второй аргумент уменьшится до 0 , функция при последнем вызове возвратит 0 и ее работа завершится.
- Выводим результат на экран.
- Конец.
Исходный код
Объяснение работы программы
- Пользователь вводит два числа и они записываются в переменные a и b .
- Передаем эти переменные в качестве аргументов в рекурсивную функцию product() .
- В начале работы функции проверяем, какой из аргументов больше. Если первый аргумент меньше второго, то вызываем данную функцию вновь, меняя аргументы местами, то есть product(b, a) .
- В качестве базового условия рекурсии принимаем равенство 0 второго аргумента функции (меньшего). Пока второй аргумент не равен 0 , функция возвращает сумму первого аргумента и рекурсивный вызов самой себя, где второй аргумент уменьшается на единицу: a + product(a, b-1) .
- Когда второй аргумент уменьшится до 0 , функция при последнем вызове возвратит 0 и ее работа завершится. Таким образом, мы в результате накопили сложение числа a c самим собой ровно b раз, что как раз эквивалентно умножению a на b .
- Выводим результат на экран.
Результаты работы программы
Пример 1: Введите первое число: 12 Введите второе число: 10 Произведением двух чисел будет: 120 Пример 2: Введите первое число: 12 Введите второе число: 11 Произведением двух чисел будет: 132