Как перемножить элементы списка python
Перейти к содержимому

Как перемножить элементы списка python

  • автор:

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

Author24 — интернет-сервис помощи студентам

Ребят, столкнулся с такой проблемкой: я знаю что есть такая встроенная функция как 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 @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

  • 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. Не пытайтесь повторить это дома.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *