首页 > 解决方案 > 点对点迭代后如何计算结果的总和,不包括重复

问题描述

从我的函数的结果中,我收到了一个对齐 n 序列的分数,忽略了 5 个序列的重复 Eg:

1 vs 2 = 11
1 vs 3 = 322
1 vs 4 = -132
1 vs 5 = -22
2 vs 3 = -5
2 vs 4 = 169
2 vs 5 = 222
3 vs 4 = -140
3 vs 5 -16
4 vs 5 = 111

并将它们存储在一个列表中:

my_list = [11, 322, -132, -22, -5, 169, 222, -140, -16, 111]

我想总结出现序列的所有结果,并从中创建一个新列表。求和示例:

S1 = 11+322-132-22 = 179

S2 = 11-5+169+222 = 397

等等

new_list = [179, 397, 161, 8, 295]

有没有什么简单的方法可以创建一个对不同数量的序列灵活的函数并做到这一点?

标签: pythonloops

解决方案


假设您的序列长度是n(= 5 这里)。利用:

def f(n, my_list)
   arr = np.zeros((n, n))
   mask = np.tril(np.ones((n, n))) == 0
   arr[mask] = my_list
   new_list = np.sum(arr + arr.T, axis = 1)

输出:

>>> new_list
array([179., 397., 161.,   8., 295.])

推荐阅读