有没有办法在一行中编写以下代码?
my_list = [[1, 1, 1], [1, 2], [1, 3]]
result = 1
for l in list:
result = result * sum(l)
答案 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来计算总和的乘积。