怎么转换成列表推导式

问题遇到的现象

如何用列表推导式,替代下面的代码

问题相关代码,请勿粘贴截图
M = [[random.randint(0, 20) for x in range(3)] for y in range(3)]
D = []
# 推导出对角线,用列表推导式
for m in range(3):
    for n in range(3):
        if m==n:
            D.append(M[m][n])
        elif abs(m-n)==2:
            D.append(M[m][n])
print(D)

# 计算M中所有元素之和
sum = 0
for m in range(3):
    for n in range(3):
        sum = sum + M[m][n]
print('M中所有元素之和为sum=', sum)
我想要达到的结果

如何用列表推导式替代上述生成列表D和sum

最好不要使用内置函数做变量,求和可以直接使用内置函数sum

D = [M[m][n] for m in range(3) for n in range(3) if m==n or abs(m-n)==2]
# 计算M中所有元素之和
s=sum(M[m][n] for m in range(3) for n in range(3))