如何将两个列表中的最大元素相乘,然后得到结果的总和

时间:2017-03-30 05:21:17

标签: python

list1的= [1,2,3,4,5,6,7] list2中= [6,4,5] 我想计算两个列表中第i个最大元素对的乘法,然后计算结果的总和,如6 * 7 + 5 * 6 + 4 * 5。 是否存在短编码的python技巧。

4 个答案:

答案 0 :(得分:0)

>>> a=[1,2,3,4,5,6,7]
>>> b=[6,4,5]
>>> sum([x*y for x,y in zip(sorted(a, reverse=True), sorted(b, reverse=True))])
92

sum(map(lambda a, b: a*b, sorted(a, reverse=True), sorted(b, reverse=True)))

没有特殊的技巧,熟悉python中的一些常见函数,例如mapsumsortedlambda或更多{{3 }和itertools。并学习一些functools ...

答案 1 :(得分:0)

list1=[1,2,3,4,5,6,7]
list2=[6,4,5]

sum(reduce(lambda a,b:a*b, i, 1) for i in zip(sorted(list1, reverse=True), sorted(list2, reverse=True)))
>>> 92

答案 2 :(得分:0)

你可以这样试试......

list1=[2,3,4,5,7,1,6]
list2 = [4,6,5]

list1 = sorted(list1,reverse = True)
list2 = sorted(list2, reverse=True)
sum = 0
length = min(len(list1),len(list2))
for i in range(length):
    sum =sum + list1[i]*list2[i]
print sum

答案 3 :(得分:0)

已经发布了一些下降答案,但我想扩展一些@delta所提到的functools和itertools的额外功能。 Python 2.x解决方案:

from functools import partial # helps with less typing & faster lookup
from itertools import izip # izip is a lazy memory efficient version of zip

In [33]: list1, list2 = [1,2,3,4,5,6,7], [6,4,5]
In [34]: des_sort = partial(sorted, reverse=True) #
In [35]: sum(a*b for a,b in izip(des_sort(list1), des_sort(list2))) 
Out[35]: 92

注意使用sum([...])使用生成器表达式而不是列表理解来执行sum()。

有更多数学密集型操作的numpy / pandas路线;对于小型列表来说速度较慢,但​​对于大型numpy ndarray类型有效。

当然,所有速度/内存优势仅适用于较大的数据集,否则任何其他解决方案都可以正常工作。

In [39]: import pandas as pd
In [40]: pd.DataFrame([des_sort(list1), des_sort(list2)]).fillna(0).prod().sum() # performs dot product
Out[40]: 92.0