Вот пример, демонстрирующий, как найти сумму в обоих случаях, используя вложенный цикл:
matrix = [[i+j for j in range(4)] for i in range(4)]
for row in matrix:
print(" ".join(list(map(str,row))))
totalSum = 0
for i in range(1,len(matrix)):
for j in range(i):
totalSum += matrix[i][j]
print("Below sum: ", totalSum)
totalSum = 0
for i in range(len(matrix)):
for j in range(i+1,len(matrix)):
totalSum += matrix[i][j]
print("Above sum: ", totalSum)
Выход:
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
Below sum: 18
Above sum: 18
Вы также можете использовать эти однострочники:
Диагональ ниже:
totalSum = sum([matrix[i][j] for i in range(1,len(matrix)) for j in range(i)])
Выше диагонали:
totalSum = sum([matrix[i][j] for i in range(len(matrix)) for j in range(i+1,len(matrix))])
Если вы хотите сложить все числа выше и ниже основной диагонали, вы можете выполнить проверку индекса:
totalSum = 0
for i in range(len(matrix)):
for j in range(len(matrix)):
if not i==j:
totalSum += matrix[i][j]
print("Sum: ", totalSum)
Еще один способ найти эту сумму (хотя и не рекомендуется) - найти общую сумму матрицы и сумму главной диагонали, а затем выполнить вычитание, чтобы найти окончательную сумму:
matrix = [[i+j for j in range(4)] for i in range(4)]
for row in matrix:
print(" ".join(list(map(str,row))))
matrixSum = sum([sum(elem for elem in row) for row in matrix])
diagonalSum = sum([matrix[i][i] for i in range(len(matrix))])
finalSum = matrixSum - diagonalSum
print("Matrix sum: ", matrixSum)
print("Diagonal sum: ", diagonalSum)
print("Final sum: ", finalSum)
Вывод:
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
Matrix sum: 48
Diagonal sum: 12
Final sum: 36
Примечание: Учитывайте синтаксис в операторах print
, когда вы используете Python 2, а мой ответ - в Python 3.