Умножьте каждый элемент в списке на каждый элемент в другом списке?

#python #python-3.x #list

Вопрос:

У меня есть 2 списка

 listA = [2,3,4]
listB = [3,4,5]
 

Я хочу знать, есть ли простой способ умножить каждый элемент в списке на каждый элемент в другом списке без использования нескольких циклов for. В конечном счете, я должен получить следующий ответ

 listC = [6,8,10,9,12,15,12,16,20]
 

Ответ №1:

В принципе, вы ищете itertools.продукт, который выполняет декартово произведение итераций

https://docs.python.org/3/library/itertools.html#itertools.product

 import iterools
print([a * b for a, b in itertools.product(listA, listB)])
 

Ответ №2:

 import itertools

listA = [2, 3, 4]
listB = [3, 4, 5]
listC = [a * b for a, b in itertools.product(listA, listB)]
print(listC)
# [6, 8, 10, 9, 12, 15, 12, 16, 20]
 

Ответ №3:

с помощью List comprehension

 listA = [2,3,4]
listB = [3,4,5]
l = [i * j for i in listA for j in listB]
print(l)

#[6, 8, 10, 9, 12, 15, 12, 16, 20]
 

Комментарии:

1. Я знаю, что типичный ответ будет вращаться вокруг itertools.product() , но мне нравится этот, поскольку он позволяет избежать этого импорта.

Ответ №4:

Хорошие решения уже были предложены. Вот еще один с math.prod :

 from itertools import product
from math import prod
list(map(prod, product(listA, listB)))
# > [6, 8, 10, 9, 12, 15, 12, 16, 20]
 

В случае, если вы хотите сделать это с любым количеством списков, вы можете использовать math.prod для уменьшения:

 list_of_list = [[2,3], [3,4], [10, 12]]
from itertools import product
from math import prod
list(map(prod, product(*list_of_list)))
# > [60, 72, 80, 96, 90, 108, 120, 144]
 

Оба math и itertools являются встроенными модулями python.