我有两个python的浮动列表(列表的大小相同,即元素的数量相同)
list1 = [20, 30, 40, 50]
list2 = [1.1, 1.3, 1.7, 1.8]我想要计算sum(list1[i]*list2[i])/sum(list1[i]) (从0到len(list1)。
这可以使用for循环来完成,但是有没有更好的方法(更多的pythonic方式,比如使用lambda等)
谢谢
发布于 2011-03-31 12:47:13
不确定是不是更有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)发布于 2011-03-31 12:49:35
我不确定我会说使用lambda是“更多的pythonic”,特别是考虑到人们试图减少它的能力或将其从语言中删除的次数。
有几种方法可以做到这一点。一些人发布了压缩列表,以便你可以使用列表理解。如果你正在寻找速度,numpy有一个点积函数。如果你正在寻找更简洁的东西,你也可以使用sum([lst1[i] * lst2[i] for i in range(len(lst1))])。
发布于 2011-03-31 12:50:09
这里有一种方法可以做到。
>>> sum(map(lambda i: i[0]*i[1],zip(list1,list2)))/sum(list1)
1.5642857142857143https://stackoverflow.com/questions/5495385
复制相似问题