我有两个浮点数的python列表(列表大小相同,即元素数量相同)
list1 = [20, 30, 40, 50]
list2 = [1.1, 1.3, 1.7, 1.8]
我想计算sum(list1[i]*list2[i])/sum(list1[i])
(其中i从0变为len(list1)。
这可以使用for循环来完成,但有更好的方法(更像pythonic的方式,比如使用lambda等)。
由于
答案 0 :(得分:2)
不确定更多Pythonic(简单就更好了,对吧?)但是对于更简洁的东西,怎么样:
sum(a * b for a, b in zip(list1, list2)) / sum(list1)
这很大程度上改编自another answer by SilentGhost。
顺便说一下,你所做的第一部分(直到除法)被称为点积。如果您安装了numpy
,则可以执行以下操作:
from numpy import dot
dot(list1, list2) / sum(list1)
答案 1 :(得分:1)
我不确定我会说使用lambda是“更加pythonic”,特别是考虑到人们试图降低其功率或将其从语言中删除的次数。
有几种方法可以做到。一些人发布了压缩列表,以便您可以使用列表理解。如果您正在寻找速度,numpy具有点积函数。如果您正在寻找更简洁的东西,您也可以sum([lst1[i] * lst2[i] for i in range(len(lst1))])
。
答案 2 :(得分:1)
这是一种方法。
>>> sum(map(lambda i: i[0]*i[1],zip(list1,list2)))/sum(list1)
1.5642857142857143
答案 3 :(得分:0)
<强> List comprehension:
强>
>>> sum([ x*y for x,y in zip(list1,list2)])/sum(list1)
1.5642857142857143
答案 4 :(得分:0)
这样的东西?
sum(x*y for x, y in zip(list1, list2))/sum(list1)