Я приведу не очень практичное, но красивое решение в одну строку. Оно не использует eval
, побочные эффекты при работе со списком или именованные функции.
Если именованные функции разрешены, то решение может выглядеть так:
def p(a):
if a:
return a[0] * p(a[1:])
return 1
print(p([1, 2, 3, 4, 5]))
Нам оно не подходит, так именованная функция требует минимум две строки для определения и вызова. Лямбду можно определить и вызвать в одной строке, но есть трудность в создании рекурсивной лямбды. Синтаксис Python разрешает такой трюк:
p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))
Это именно трюк с глобальной переменной и двумя операторами в одной строке. А можно обойтись без глобальной переменной вообще. На первый взгляд этого не может быть так как имя нужно чтобы сделать рекурсивный вызов. Но функцию можно передать как аргумент в саму себя:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
print(p(p, [1, 2, 3, 4, 5]))
Кажется мы ничего не выиграли: всё равно два оператора и глобальная переменная p
. Однако сделан очень важный шаг — тело лямбды не использует глобальные переменные. Глобальная переменная используется в операторе print
. Избавимся от неё:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
y = lambda f, a: f(f, a)
print(y(p, [1, 2, 3, 4, 5]))
Стало только хуже: три строки и две глобальные переменные. Зато каждая глобальная переменная задействована только один раз. Делаем подстановку:
print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))
Читается тяжело, но задача решена в одну строку без глобальных имён и волшебных вызовов eval
.
P.S. Читайте Fixed-point combinator чтобы узнать откуда пошло это решение.
P.P.S. Красивое утверждение: программу любой сложности можно записать в функциональном стиле не определив ни одной глобальной переменной, включая имена функций.
P.P.P.S. Не пытайтесь повторить это дома.
In this tutorial, you will learn to multiply all numbers in a list in Python. List is an ordered set of values enclosed in square brackets [ ]. List stores some values called elements in it, which can be accessed by their particular index. We will write a function that will multiply all numbers in the list and return the product.
Multiplying all the values will give a single product. For example, for a list [2, 5, 9] the product will be 90. We will be discussing the various approaches by which we can calculate the product of all numbers in a list.
Take a look at the sample input and output
Input: list= [5, 3, 2, 7]
Output: 210
Approach
For executing this program in Python, we can follow any one of the following approaches.
- By traversing the list and multiplying each element
- Using math.prod() function
- numpy.prod() function
Let us look at all the approaches one by one
Approach 1: By using loop
In this approach, we will traverse till the end of the list to find the product. Initialize a variable product to 1 and multiply each number in the list with a product to get the result. To access each number in the list we will use for loop in Python.
Algorithm
Follow the algorithm to understand the approach better
Step 1- Define a function to multiply numbers
Step 2- Declare a variable product and set it to 1
Step 3- Run a loop for all elements in the list
Step 4- Multiply all elements to the product
Step 5- Return product
Step 7- Declare a list
Step 8- Pass list in our function
Step 9- Print value returned by the function
Python Program 1
Look at the program to understand the implementation of the above-mentioned approach.
#multiply all numbers in list
#function
def mul_list(list) :
# Multiply elements one by one
product = 1
for i in list:
product = product * i
return product
list1 = [11, 12, 4, 3]
print(list1)
print("product: ")
print(mul_list(list1))
[11, 12, 4, 3]
product:
1584
Approach 2: Using math.prod() Function
In this approach, we have used a function prod() of the math module to calculate the product. Math module provides access to various mathematical functions like pow(), sum(), avg() in our program. Let’s see the algo.
Algorithm
Follow the algorithm to understand the approach better
Step 1- Import math module in the program
Step 2- Define a function to multiply numbers
Step 3- Return math.prod(list)
Step 4- Declare list
Step 5- Call function and pass list
Step 6- Print the value returned by the function
Python Program 2
Look at the program to understand the implementation of the above-mentioned approach.
#multiply all numbers in list
#import math module
import math
def mul_list(list):
return math.prod(list)
list1 = [3, 2, 5, 4, 8, 9, 10]
print(list1)
print("product: ")
print(mul_list(list1))
[3, 2, 5, 4, 8, 9, 10]
product:
86400
Approach 3: Using numpy.prod() Function
In this approach, we have used a function prod() of the NumPy module to calculate the product. It allows a programmer to perform various advanced mathematical operations on large numbers of data.
Algorithm
Follow the algorithm to understand the approach better
Step 1- Import NumPy module in the program
Step 2- Define a function to multiply numbers
Step 3- Return numpy.prod(list)
Step 4- Declare a list
Step 5- Call function and pass the list
Step 6- Print the value returned by the function
Python Program 3
Look at the program to understand the implementation of the above-mentioned approach.
#multiply all numbers in list
#import numpy module
import numpy
def mul_list(list):
return numpy.prod(list)
list1 = [3, 2, 5, 4, 8, 9, 10]
print(list1)
print("product: ")
print(mul_list(list1))
[12, 11, 9]
product:
1188
Conclusion
In this tutorial, we have learned three ways for calculating the product of elements in a list in Python. We have used, a loop to access elements individually for calculating products. We have also seen how to use the math module and NumPy module to calculate products.
Как мне сделать такую вещь? Надо в цикле for i in range найти произведение цифр каждого i. К примеру
for i in range (15, 25)
и выводиться будет 5, 6, 7 … 6, 8, 10
Получается реализовать только для одного числа, а с for уже никак
-
Вопрос заданболее двух лет назад
-
883 просмотра
def mult(l):
m=1
for i in l:
m*=int(i)
return m
print ([ mult(str(x)) for x in range(15,26)])
def getting_digits(number):
answer = str()
while number:
answer += str(number % 10)
number //= 10
return(answer)
def digits_mult(low_border, high_border):
for i in range(low_border, high_border):
number = 1
for digit in getting_digits(i):
number *= int(digit)
print(number, end = ' ')
Пригласить эксперта
-
Показать ещё
Загружается…
30 мая 2023, в 00:55
125000 руб./за проект
30 мая 2023, в 00:34
1000 руб./за проект
29 мая 2023, в 23:21
2000 руб./за проект
Минуточку внимания
0 / 0 / 0 Регистрация: 20.12.2013 Сообщений: 6 |
|
1 |
|
Найти произведение всех целых20.12.2013, 23:45. Показов 29310. Ответов 3
а) произведение всех целых чисел от 8 до 15
0 |
KOPOJI Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
||||||||||||
21.12.2013, 00:40 |
2 |
|||||||||||
а)
б)
в)
Проверки на то, что ввели и т.п. сами сделайте..
2 |
dondublon 4607 / 2028 / 359 Регистрация: 17.03.2012 Сообщений: 10,086 Записей в блоге: 6 |
||||
23.12.2013, 09:51 |
3 |
|||
Сообщение было отмечено Пакетик чаю как решение Решение
Где a,b — границы интервала включительно.
0 |
0 / 0 / 0 Регистрация: 27.06.2021 Сообщений: 7 |
|
26.09.2021, 16:17 |
4 |
а как найти произведение чисел от a до b == c в цикле чтобы получилось в питоне
0 |
Я приведу не очень практичное но красивое решение в одну строку. Оно не использует eval
, побочные эффекты при работе со списком или именованные функции.
Если именованные функции разрешены, то решение может выглядеть так:
def p(a):
if a:
return a[0] * p(a[1:])
return 1
print(p([1, 2, 3, 4, 5]))
Нам оно не подходит, так именованная функция требует минимум две строки для определения и вызова. Лямбду можно определить и вызвать в одной строке, но есть трудность в создании рекурсивной лямбды. Синтаксис Python разрешает такой трюк:
p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))
Это именно трюк с глобальной переменной и двумя операторами в одной строке. А можно обойтись без глобальной переменной вообще. На первый взгляд этого не может быть так как имя нужно чтобы сделать рекурсивный вызов. Но функцию можно передать как аргумент в саму себя:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
print(p(p, [1, 2, 3, 4, 5]))
Кажется мы ничего не выиграли: всё равно два оператора и глобальная переменная p
. Однако сделан очень важный шаг — тело лямбды не использует глобальные переменные. Глобальная переменная используется в операторе print
. Избавимся от неё:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
y = lambda f, a: f(f, a)
print(y(p, [1, 2, 3, 4, 5]))
Стало только хуже: три строки и две глобальные переменные. Зато каждая глобальная переменная задействована только один раз. Делаем подстановку:
print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))
Читается тяжело, но задача решена в одну строку без глобальных имён и волшебных вызовов eval
.
P.S. Читайте Fixed-point combinator чтобы узнать откуда пошло это решение.
P.P.S. И есть очаровательное утверждение: программу любой сложность можно записать в функциональном стиле не определив ни одной глобальной переменной, включая имена функций.
P.P.P.S. Не пытайтесь повторить это дома.