Помогите с упрощением кода новичку, пожалуйста! Python/Питон
Как можно упростить этот код? Просто понимаю, что он (а именно последняя строчка) какой-то некрасивый и длинный. Цель кода в том, чтобы перемножить элементы одного списка на элементы другого соответственно их порядковому номеру (0 элемнт на 0 элемент, 1 на 1, 2 на 2 и т.д.)
d = [12, 5, 2, 14, 9]
sh = [1, 2, 3, 4, 5]
list1=list(zip(d,sh))
#Так я объеденил списки, сделав кортежи в списке: list1 = [(12, 1), (5, 2), (2, 3), (14, 4), (9, 5)]
#Сейчас буду делать функцию для умножения всех элементов списка
from functools import reduce
import operator
def prod(iterable):
return reduce(operator.mul, iterable, 1)
print(list(prod(list1[0]),prod(list1[1]), prod(list1[2]), prod(list1[3]), prod(list1[4])))
Результат: [12, 10, 6, 56, 45]
Код работаетет, но мне не нравится его вид. Так много prod из-за того, что map почему-то не хотела работать с prod:
print(list(map(prod, (list1[0]), (list1[1]), (list1[2]), (list1[3]), (list1[4]))))
TypeError: prod() takes 1 positional argument but 5 were given
Как сдалать правильно? Заранее спасибо!
Ответы (2 шт):
Автор решения: Никита Филимонов
→ Ссылка
2 варианта:
без map:
print(*[prod(i) for i in list1])
c map:
print(*map(prod, list1))