【问题标题】:Python multiply list of lists element-wisePython按元素乘以列表列表
【发布时间】:2026-01-17 19:35:01
【问题描述】:

将数字列表按元素相乘的最佳方法是什么?

例如

[[1,2,3],[2,3,4],[3,4,5]]

-> [6,24,60]

【问题讨论】:

  • 在您给定的示例中,3 个不同子列表中同一索引的任意 3 个元素的乘积等于取同一索引的整个子列表的乘积。只是指出这一点。

标签: python list numpy


【解决方案1】:

使用np.prod:

>>> a = np.array([[1,2,3],[2,3,4],[3,4,5]])
>>> np.prod(a,axis=1)
array([ 6, 24, 60])

【讨论】:

  • 这假定所有子列表的大小相同。
  • @François 如果他使用 numpy 开始,这是一个有效的假设。
  • ImportError: No module named 'np', 我只能猜测 np 是为 Numpy 准备的?
  • @ThorSummoner 是的,import numpy as np 是导入 numpy 的规范方式。
【解决方案2】:

使用列表理解和reduce:

>>> from operator import mul
>>> lis = [[1,2,3],[2,3,4],[3,4,5]]
>>> [reduce(mul, x) for x in lis]
[6, 24, 60]

【讨论】:

  • 啊!你打败了我(+1)。好的,我再添加一个,functools.partialmap
  • 我推荐 reduce(mul, x, 1) 以便它安全地扩展到空列表(根据定义,空产品等于 1)。
【解决方案3】:
import operator
import functools
answer = [functools.reduce(operator.mul, subl) for subl in L]

或者,如果您更喜欢地图:

answer = map(functools.partial(functools.reduce, operator.mul), L)  # listify as required

【讨论】: