python - 我可以编写更有效的代码来在 Python 中获取对角线总和吗?
问题描述
我已经通过使用 for loops of row then column 解决了这个问题。但我想知道是否有更多 Pythonic 方式?谢谢。
问题 - 给出一个二维矩阵,得到两个对角线和。例如:
matrix = [[1,2,3],
[4,5,6],
[7,8,9]]
get_diag(matrix) # 25
解决方案
您可以在展平矩阵上使用切片来对迭代器执行求和(即不使用索引):
from itertools import chain,islice
def sumDiag(M):
D = len(M)
S = sum(islice(chain.from_iterable(M),0,None,D+1)) # main
S += sum(islice(chain.from_iterable(reversed(M)),0,None,D+1)) # inv
return S - M[D//2][D//2]*(D%2) # subtract center if double counted
输出:
matrix = [[1,2,3],
[4,5,6],
[7,8,9]]
print(sumDiag(matrix)) #25
matrix = [[1,2,3,3],
[4,5,6,0],
[7,8,9,2],
[4,0,2,2]]
print(sumDiag(matrix)) #38
或者,您可以生成索引并使用它们来获取要添加的项目。不确定这是否更“Pythonic”:
def sumDiag(M):
return sum(matrix[r][r]+matrix[-r-1][r] for r in range(len(M))) \
- M[len(M)//2][len(M)//2]*(len(M)%2)
推荐阅读
- sql - Powershell – 使用 SQL 数据 Ping 服务器进程
- google-api - 管理目录 users.list 请求返回 400 Bad request
- python - Pandas .filter() 属性的 Dask 等价物是什么?
- c# - 区分 SQL 数据库中的用户 - 与多个 SQLite 离线数据库同步 C# UWP
- python - 使用 pandas 将列表元素添加在一起
- vba - 工作表上的平均值 Excel Vba
- reactjs - Apollo boost 在嵌套查询中接收 null
- javascript - 在同一页面上呈现部分视图
- python - scikit learn Grid Cross Validation 返回不正确的均值
- java - 太长的maven url