Skip to main content
 首页 » 编程设计

python之数字对列表之需要策略来乘积和求和

2025年05月04日15jpfss

我有一个数字对列表如下:

my_list = [(0,9),(1,5),(0,12),(2,8),(1,13),(2,17)] 

我需要基于每对第一个数字的点积作为匹配键。换句话说,我会将 9 和 12 相乘,因为 0 匹配。我将把它放在一边并添加下一个匹配项的乘积(5 * 13,因为它们匹配值 1)。

我有一个丑陋的解决方案,它需要我知道列表的长度:

print my_list 
dotproduct = 0 
i = 0 
for ml1 in my_list: 
 
  for ml2 in my_list: 
      if ml1[0] == ml2[0] and ml1[1] != ml2[1] and i < 4: 
        print 'multiply ',ml1[1] ,' and ', ml2[1] 
        dotproduct += ml1[1] * ml2[1] 
        print 'count = ', i 
        i += 1 
print dotproduct 

这也仅在乘积的操作数不相等时才有效。简而言之,它适用于集合长度已知且乘积操作数不相同的情况。相当虚弱。

如果不是很明显,我是 Python 初学者。

请您参考如下方法:

这可以用 collections.defaultdict 非常简单地完成。 :

from collections import defaultdict 
 
out = defaultdict(lambda: 1) 
 
for key, val in my_list: 
    out[key] *= val 
dotproduct = sum(out.values()) 

对于您的示例输入,这给了我 dotproduct == 309。