#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.