这可以使用列表推导单行完成吗?
lst = [[1, 2, 3], [1, 2, 3, 4], [5, 6], [9]]
products = ?? (Multiple each list elements)
所需输出= [6, 24, 30, 9]
我尝试过类似的事情:
products = [l[i] * l[i + 1] for l in lst for i in range(len(l) - 1)]
但没有用。
答案 0 :(得分:9)
您可以使用reduce()
将乘法应用于整数列表,并与operator.mul()
一起进行实际乘法运算:
from functools import reduce
from operator import mul
products = [reduce(mul, l) for l in lst]
在Python 3中,reduce()
已移至functools.reduce()
,因此支持import
语句。自从Python 2.6以来存在functools.reduce
,如果您需要保持代码与Python 2和3兼容,则从那里导入它会更容易。
演示:
>>> from operator import mul
>>> lst = [[1, 2, 3], [1, 2, 3, 4], [5, 6], [9]]
>>> [reduce(mul, l) for l in lst]
[6, 24, 30, 9]
operator.mul()
可以替换为lambda x, y: x * y
,但为什么要养狗并自己吠?
答案 1 :(得分:3)
使用numpy
>>> from numpy import prod
>>> [prod(x) for x in lst]
[6, 24, 30, 9]
答案 2 :(得分:1)
是的,您可以在列表解析中使用reduce
和lambda表达式:
>>> [reduce(lambda x, y: x * y, innerlst) for innerlst in lst]
[6, 24, 30, 9]
注意,在Python 3中,reduce
已移至functools
模块,因此您必须从中导入:
from functools import reduce
如果您不想使用lambda表达式,可以完全由operator.mul
替换。
答案 3 :(得分:1)
使用this解决方案为列表创建产品运算符,您可以执行以下操作:
lst = [[1, 2, 3], [1, 2, 3, 4], [5, 6], [9]]
import operator
from functools import reduce # Valid in Python 2.6+, required in Python 3
def prod(numeric_list):
return reduce(operator.mul, numeric_list, 1)
[prod(l) for l in lst]
输出继电器:
Out[1]: [6, 24, 30, 9]
答案 4 :(得分:0)
尝试:
products = [reduce(lambda x, y: x * y, l) for l in lst]
答案 5 :(得分:0)