Pythonic计算方式

时间:2011-03-31 04:39:11

标签: python

我有两个浮点数的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等)。

由于

5 个答案:

答案 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)