【发布时间】:2026-01-17 19:35:01
【问题描述】:
将数字列表按元素相乘的最佳方法是什么?
例如
[[1,2,3],[2,3,4],[3,4,5]]
-> [6,24,60]
【问题讨论】:
-
在您给定的示例中,3 个不同子列表中同一索引的任意 3 个元素的乘积等于取同一索引的整个子列表的乘积。只是指出这一点。
将数字列表按元素相乘的最佳方法是什么?
例如
[[1,2,3],[2,3,4],[3,4,5]]
-> [6,24,60]
【问题讨论】:
使用np.prod:
>>> a = np.array([[1,2,3],[2,3,4],[3,4,5]])
>>> np.prod(a,axis=1)
array([ 6, 24, 60])
【讨论】:
import numpy as np 是导入 numpy 的规范方式。
使用列表理解和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]
【讨论】:
functools.partial 和 map
reduce(mul, x, 1) 以便它安全地扩展到空列表(根据定义,空产品等于 1)。
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
【讨论】: