这里有两种简洁的方法。
第一次使用
itertools.product()
还有一份清单:
from itertools import product
[x * y for x, y in product(list1, list2)]
但是,这个问题非常适合于
itertools.starmap()
,这是第二种方法的动力。如果您不熟悉该函数,它会包含两个参数:
-
接受两个参数的函数。在这种情况下,我们使用
operator.mul
,一种我们可以传递到函数中的乘法运算符。请注意,函数可以传递到Python中的其他函数中,因为函数是
first class
.
-
一个二号的小房间。在这种情况下,这是我们从
itertools。产品()
.
对于iterable中的每个元素,它将元素解包,并将每个元素作为参数传递到第一个参数指定的函数中。这给了我们:
from itertools import product, starmap
import operator
list(starmap(operator.mul, product(list1, list2)))
这两种输出:
[12, 4, 36, 8, 6, 2, 18, 4, 21, 7, 63, 14]
如果您想将此方法扩展到两个以上的iTerable,可以这样做(如
flakes
):
from math import prod
list(map(prod, product(list1, list2, <specify more iterables>)))
其他答案建议使用多个选项
for
理解中的循环。注意
some consider this approach to be poor style
; 使用
itertools。产品()
完全避免这个问题。
如果你有任何问题,请随意评论——我非常乐意澄清任何困惑。我意识到这些解决方案可能不是最适合初学者的。至少,我希望这些方法对未来的读者有用。