Python求和然后乘以几个列表的值

时间:2016-07-18 15:50:30

标签: python

有没有办法在一行中编写以下代码?

my_list = [[1, 1, 1], [1, 2], [1, 3]]
result = 1
for l in list:
    result = result * sum(l)

4 个答案:

答案 0 :(得分:5)

reduce获取的汇总子列表中使用map

这样做:

>>> from functools import reduce
>>> reduce(lambda x,y: x*y, map(sum, my_list))
36

在python 2.x中,由于import是内置的,因此不需要reduce

>>> reduce(lambda x,y: x*y, map(sum, my_list))
36

答案 1 :(得分:3)

你走了:

import operator
my_list = [[1, 1, 1], [1, 2], [1, 3]]
print reduce(operator.mul, [sum(l) for l in my_list])

答案 2 :(得分:0)

numpy

In [1]: from numpy import prod
In [2]: prod([sum(i) for i in my_list])
Out[2]: 36

另一种方法。

In [1]: eval('*'.join(str(item) for item in [sum(i) for i in my_list]))
Out[1]: 36

答案 3 :(得分:0)

也许有些人认为需要import陈述的单行不是真正的单行。只是为了好玩,那些认为如此的人可能更喜欢这种对目前建议的方法的模糊解决方案:

In [389]: (lambda f: lambda n: f(f, n))(lambda rec, x: 1 if not x else x[0]*rec(rec, x[1:]))(map(sum, my_list))
Out[389]: 36

上面的代码依赖于内置函数map()sum()来计算子列表的总和,并依赖recursive calls to a lambda function来计算总和的乘积。