Перемножение элементов списка

Ребят, столкнулся с такой проблемкой: я знаю что есть такая встроенная функция как sum(), складывающая все что в скобках. Меня интересует следующий вопрос — есть ли какая-нибудь встроенная функция, умножающая все элементы в скобках между собой? Если такой функции нет, то как произвести перемножение этих элементов, используя генератор списков? Заранее, спасибо=)
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Перемножение элементов массива
Привет! у меня есть лист состоящий из чисел,подскажите как я могу перемножить все числа друг на.
Перемножение элементов
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, советом. Проблема в следующем. Имеется.
Перемножение элементов векторов
Даны два вектора А(10) и В(11). Вычислить z=c*d ,где с – количество положительных элементов вектора.
Перемножение элементов массива
Добрый день. Вот, столкнулся с не пониманием того, как перемножить все элементы в массиве. .

Перемножение элементов матриц
Перемножить соответствующие значения первой матрицы находящихся над главной диагональю и значение.
Как перемножить элементы списка python
На этом шаге мы рассмотрим назначение и примеры использования этих функций .
До сих пор мы только выводили элементы последовательностей. Теперь попробуем умножить каждый элемент списка на 2:
arr = [1, 2, 3] for i in arr: i = i * 2 print(arr)
Рис.1. Текст программы и результат выполнения
Архив с файлом можно взять здесь.
Как видно из примера, список не изменился. Переменная i на каждой итерации цикла содержит лишь копию значения текущего элемента списка. Изменить таким способом элементы списка нельзя. Чтобы получить доступ к каждому элементу, можно, например, воспользоваться функцией range () для генерации индексов. Функция range() имеет следующий формат:
range([Начало>, ]Конец>[, Шаг>])
Первый параметр задает начальное значение. Если параметр < Начало >не указан, то по умолчанию используется значение 0. Во втором параметре указывается конечное значение. Следует заметить, что это значение не входит в возвращаемые значения. Если параметр < Шаг >не указан, то используется значение 1. Функция возвращает диапазон — особый объект, поддерживающий итерационный протокол. С помощью диапазона внутри цикла for можно получить значение текущего элемента. В качестве примера умножим каждый элемент списка на 2 (рисунок 2).
arr = [1, 2, 3] for i in range(len(arr)): arr[i] *= 2 print(arr)
Рис.2. Текст программы и результат выполнения
Архив с файлом можно взять здесь.
В этом примере мы получаем количество элементов списка с помощью функции len () и передаем результат в функцию range () . В итоге функция range() возвращает диапазон значений от 0 до len (arr) — 1. На каждой итерации цикла через переменную i доступен текущий элемент из диапазона индексов. Чтобы получить доступ к элементу списка, указываем индекс внутри квадратных скобок. Умножаем каждый элемент списка на 2, а затем выводим результат с помощью функции print () .
Рассмотрим несколько примеров использования функции range() . Выведем числа от 1 до 100:
for i in range(1, 101): print(i)
Можно не только увеличивать значение, но и уменьшать его. Выведем все числа от 100 до 1:
for i in range(100, 0, -1): print(i)
Можно также изменять значение не только на единицу. Выведем все четные числа от 1 до 100:
for i in range(2, 101, 2): print(i)
В Python 3 поведение функция range() возвращает диапазон. Чтобы получить список чисел, следует передать диапазон, возвращенный функцией range() , в функцию list() (рисунок 3).
>>> obj = range(len([1, 2, 3])) >>> obj range(0, 3) >>> obj[0], obj[1], obj[2] # Доступ по индексу (0, 1, 2) >>> obj[0:2] # Получение среза range(0, 2) >>> i = iter(obj) >>> next(i), next(i), next(i) # Доступ с помощью итераторов (0, 1, 2) >>> list(obj) # Преобразование диапазона в список [0, 1, 2] >>> 1 in obj, 7 in obj # Проверка вхождения значения (True, False)
Рис.3. Создание списка чисел на основе диапазона
index (< Значение >) — возвращает индекс элемента, имеющего указанное значение. Если значение не входит в диапазон, возбуждается исключение ValueError . Пример:
>>> obj = range(1, 5) >>> obj.index(1), obj.index(4) (0, 3) >>> obj.index(5) Traceback (most recent call last): File "#11>", line 1, in obj.index(5) ValueError: 5 is not in range
>>> obj = range(1, 5) >>> obj.count(1), obj.count(10) (1, 0)
Функция enumerate (< объект >[, start=0]) на каждой итерации цикла for возвращает кортеж из индекса и значения текущего элемента. С помощью необязательного параметра start можно задать начальное значение индекса. В качестве примера умножим на 2 каждый элемент списка, который содержит четное число (рисунок 4).
arr = [1, 2, 3, 4, 5, 6] for i, elem in enumerate(arr): if elem % 2 == 0: arr[i] *= 2 print(arr)
Рис.4. Пример использования функции enumerate() . Текст программы и результат выполнения
Архив с файлом можно взять здесь.
Функция enumerate() не создает список, а возвращает итератор. С помощью функции next() можно обойти всю последовательность. Когда перебор будет закончен, возбуждается исключение StopIteration :
>>> arr = [1, 2] >>> obj = enumerate(arr, start=2) >>> next(obj) (2, 1) >>> next(obj) (3, 2) >>> next(obj) Traceback (most recent call last): File "", line 1, in next(obj) StopIteration
Кстати, цикл for при работе активно использует итераторы, но делает это незаметно для нас.
На следующем шаге мы рассмотрим цикл while .
Как перемножить значения n таблиц, а потом сложить получившиеся значения n раз?
Как сделать что то подобное суммпроизв из exel, в i позиции списка находится список с значениями которые необходимо перемножить, а потом все возможные произведения сложить между собой. То есть для такого списка:
sale_transactions = [["16.03.2020 12:31:00", "RUB", "BANEP", "sale", 47, 1294, "SBER", "MOEX"], ["16.03.2020 12:31:00", "RUB", "BANEP", "sale", 22, 1293, "SBER", "MOEX"], ["16.03.2020 12:31:00", "RUB", "BANEP", "sale", 2, 1292, "SBER", "MOEX"], ["16.03.2020 12:31:00", "RUB", "BANEP", "sale", 4, 1291, "SBER", "MOEX"], ["16.03.2020 12:31:00", "RUB", "BANEP", "sale", 5, 1290, "SBER", "MOEX"]]
Ответ должен быть 103462, или же по другому сумма чисел выдаваемых следующим кодом:
for i in range(0, len(sale_transactions)): sale_transactions[i][4] * sale_transactions[i][5] print(purchase_transactions)
- Вопрос задан более трёх лет назад
- 303 просмотра
Комментировать
Решения вопроса 1
понял только с 10 раза о чем идет речь -))
можно вот так:
sum = 0 for row in sale_transactions: sum += row[4] * row[5] print(sum)
Чтобы ваш язык поняли, нужны общие слова, которые поймут все остальные
ВАш вопрос:
Как перемножить значения n таблиц, а потом сложить получившиеся значения n раз?
[«16.03.2020 12:31:00», «RUB», «BANEP», «sale», 47, 1294, «SBER», «MOEX»] — это называется список а не таблица, в python нет такого понятия как таблица
sale_transactions — это тоже список, который состоит из списков
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2

scottparker @scottparker
вы сами то понимаете что вам перемножить и сложить? )
и ваш бессмысленный)
for i in range(0, len(sale_transactions)): sale_transactions[i][4] * sale_transactions[i][5] print(purchase_transactions)
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
вторая строка в коде
purchase_transactions=purchase_transactions+sale_transactions[i][4] * sale_transactions[i][5]
Ну и последняя строчка, конечно, без отсупов.
А уж сколько она насчитает — столько насчитает.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
Flet+python после публикации как статический сайт, не прогружается, в чем проблема?
- 1 подписчик
- 37 минут назад
- 5 просмотров
Как перемножить числа в списке?
Пользователь вводит любые числа в строку, которые добавляются в список. Сумму можно найти так: sum(spisok) . А как найти произведение? Можно, вроде, циклом через for . А если, например, нужно в одну строку, то как реализовать?
Отслеживать
2,808 2 2 золотых знака 10 10 серебряных знаков 38 38 бронзовых знаков
задан 3 дек 2020 в 9:28
833 1 1 золотой знак 11 11 серебряных знаков 32 32 бронзовых знака
10 ответов 10
Сортировка: Сброс на вариант по умолчанию
Раньше можно было использвать reduce(). Сейчас тоже можно, но эту функцию вынесли в отдельный модуль, так что строго говоря, считая импорт, получается две строчки:
import functools print (functools.reduce(lambda a, b : a * b, lst))
Отслеживать
Я бы добавил ещё и третью строчку, с импортом оператора умножения =) Upd: А, это есть ниже)
3 дек 2020 в 11:30
а почему сделали общим?
3 дек 2020 в 14:12
@Danis Я сам сделал, потому что код не мой и есть на многих страницах в интернете как иллюстрация к reduce()
3 дек 2020 в 14:33
Все ответы здесь отстали от современности. Как насчет python-3.8 и выше?
math.prod
import math math.prod([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Это пожалуй самое простое и стандартное решение ИМХО.
Отслеживать
5,426 1 1 золотой знак 16 16 серебряных знаков 37 37 бронзовых знаков
ответ дан 21 дек 2020 в 11:51
USERNAME GOES HERE USERNAME GOES HERE
10.4k 21 21 золотой знак 25 25 серебряных знаков 53 53 бронзовых знака
from functools import reduce # Функция для свёрки последовательности from operator import mul # Функция, перемножающая 2 числа spisok = [16, 15, 9, 14, 13] # Исходный список result = reduce(mul, spisok) # /\ Список для свёртки # /\ Используем умножение # /\ Сворачиваем контейнер
Отслеживать
ответ дан 3 дек 2020 в 10:16
Mikhail Murugov Mikhail Murugov
5,426 1 1 золотой знак 16 16 серебряных знаков 37 37 бронзовых знаков
Можно реализовать функцию mul
def mul(list_): n = 1 for el in list_: n *= el return n
либо так, с помощью lambda и рекурсии
mul = lambda arr:arr[0] * mul(arr[1:]) if arr else 1
Отслеживать
ответ дан 3 дек 2020 в 9:41
19.8k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
тут пять строк, не считая той, где это будет вызываться. Про for автор даже в вопросе сам написал.
3 дек 2020 в 9:42
С импортом можно и так:
import numpy as np result = np.prod(np.array(mylist))
Отслеживать
ответ дан 3 дек 2020 в 9:51
Serg Bocharov Serg Bocharov
1,714 1 1 золотой знак 6 6 серебряных знаков 11 11 бронзовых знаков
Тяжеленный numpy для таких простейших задач.
3 дек 2020 в 10:17
@МихаилМуругов вопрос-то был «а можно ли сделать в одну строку?» — вот и приводим разные примеры
3 дек 2020 в 10:43
let num = Number(prompt()) let lis = [] let mult = [] while (num) < num = Number(prompt()) lis.append(num) >var m = 1 for (let n = 0; n
Отслеживать
ответ дан 3 дек 2020 в 10:56
Alexander_Sky Alexander_Sky
87 1 1 серебряный знак 8 8 бронзовых знаков
А где тут python?
3 дек 2020 в 10:58
а как это все записать в одну строчку?
3 дек 2020 в 11:01
@Эникейщик это даже не python))
3 дек 2020 в 11:01
)) правда, не обратил внимание, но это в целом не сложно должно быть переделать, если видишь на одном языке
3 дек 2020 в 11:02
@Alexander_Sky Ничего, я тут тоже поначалу путался где какой язык )) А надо на тэги смотреть
3 дек 2020 в 11:17
Я приведу не очень практичное, но красивое решение в одну строку. Оно не использует 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. Не пытайтесь повторить это дома.