Python 试图得到对角线和

Python 试图得到对角线和,python,python-2.7,sum,diagonal,Python,Python 2.7,Sum,Diagonal,试图在6创建的列表中的7个列表中按对角线方向求和。因此,假设列表是这样的,[[2,3,1],[1,1,1],[5,6,4]总和是2+1+4 #6 def randomlists(s): b=s list1 = [] while s>0: sublist = [] for x in range(0,b): sublist.append(randrange(-100,101)) list1.app

试图在6创建的列表中的7个列表中按对角线方向求和。因此,假设列表是这样的,
[[2,3,1],[1,1,1],[5,6,4]
总和是2+1+4

#6

def randomlists(s):
    b=s
    list1 = []
    while s>0:
        sublist = []
        for x in range(0,b):
            sublist.append(randrange(-100,101))
        list1.append(sublist)
        s-=1
    return list1
#print(randomlists(5))
#7

def diagonalsum(x):
    a=randomlists(x)
    count=0
    print (a)
    for b in a:
        while count<x:
            d=a[0]
            b=a[1]
            c=a[2]
            print (a[(count)])
            count+=1
        return d+b+c
print (diagonalsum(3))
#6
def随机列表:
b=s
列表1=[]
当s>0时:
子列表=[]
对于范围(0,b)内的x:
附加子列表(随机范围(-100101))
列表1.append(子列表)
s-=1
返回列表1
#打印(随机列表(5))
#7
def对角线和(x):
a=随机列表(x)
计数=0
印刷品(a)
对于a中的b:

当计数以获得对角线元素时,您在第一行中取第一个,在第二行中取第二个。。。第n行中的第n个

def diagonalsum(x):
    a = randomlists(x)
    return sum(row[i] for i, row in enumerate(a))
使用普通for循环读取的不那么简洁的替代方法

def diagonalsum(x):
    a = randomlists(x)
    result=0
    for i, row in enumerate(a):
        result += row[i]
    return result

假设矩阵为正方形,这是使用循环的标准解决方案:

def diagonalsum(m):
  count = 0
  for i in xrange(0, len(m)):
    count += m[i][i]
  return count
。。。可以使用生成器表达式和
sum
函数以更简洁的方式编写:

def diagonalsum(m):
    return sum(m[i][i] for i in xrange(len(m)))
使用numpy.trace:。它返回沿数组对角线的和

import numpy as np

M = np.array([[2,3,1],[1,1,1],[5,6,4]])

print(M.trace())

#7

我不清楚row和enumerate是什么,我们还不知道它是内置在python中的,还是那些只是程序中的变量?enumerate是python内置函数,请参见。调用
sum
中的术语是一个所谓的生成器表达式,它类似于生成列表的for循环
row
是一个临时变量,当您在其上循环时,它被设置为一个接一个的
a
的内部列表。