范围python上的条件求和

时间:2016-06-17 14:06:51

标签: python sum conditional

我已经创建了X,如下所示

num_locations = 2
X= [ ]
for n in range(num_locations):
X.append([0 for j in range(num_locations)])

现在我想对n = m的情况求和这些X [n] [m]值。结果应该是

X[0][1]+X[1][0]

有没有办法用总和表达方式来做到这一点?

X[n][m] for n in range(num_locations)for m in range(num_locations))

3 个答案:

答案 0 :(得分:2)

您只需使用enumerate

即可
>>> sum(o for i, a in enumerate(X) for j, o in enumerate(a) if i!=j)
0

ij分别是(第一个暗淡)和(第二个暗淡)索引

答案 1 :(得分:2)

这有效地取得了2D数组的非对角线元素的总和。使用Numpy的一个选项可能只是从整个数组的总和中减去主对角线(np.trace)的总和。

num_locations = 2
X= [[1,2],[2,1]]

import numpy as np
s = np.sum(X) - np.trace(X)
print(s)

<强>输出

4

答案 2 :(得分:1)

这应该有效

sum([sum(row) - (row[i] if len(row) < i else 0) for i,row in enumerate(X)])

它遍历2d数组中的每一行,并对其求和,然后取出i单元格(如果存在),以便它不会进入总和