2013-04-12 3 views
3

Попытка получить сумму по диагонали в # 7 списков, созданных # 6. Так говорят, что список был этот [[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)) 

ответ

0

Чтобы получить диагональные элементы вы берете первый в первом ряду, второй во втором ряду ... п-й в n-я строка.

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

Не настолько кратким альтернатива, которая использует нормальный цикл читает

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

Непонятно, какие строки и перечислены, мы не узнали, что это встроено в python или это просто переменные в вашей программе? –

+0

Enumerate - это встроенная функция python, см. Http://docs.python.org/2/library/functions.html#enumerate. Термин внутри вызова 'sum' является так называемым выражением генератора, который является видом цикла for, который генерирует список. 'row' - временная переменная, которая устанавливается во внутренние списки' a' один за другим, когда вы ее перебираете. – halex

6

Предполагая, что матрица является квадратной, это стандартное решение с использованием цикла:

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))) 
Смежные вопросы