Получить все диагонали в матрице / списке списков в Python

Я ищу питонический способ получить все диагонали (квадратная) матрица, представленная в виде списка списков.

Предположим, у меня есть следующая матрица:

matrix = [[-2,  5,  3,  2],
          [ 9, -6,  5,  1],
          [ 3,  2,  7,  3],
          [-1,  8, -4,  8]]

Тогда большие диагонали - это просто:

l = len(matrix[0])
print [matrix[i][i] for i in range(l)]              # [-2, -6, 7,  8]
print [matrix[l-1-i][i] for i in range(l-1,-1,-1)]  # [ 2,  5, 2, -1]

Но у меня возникли проблемы с тем, как создать все диагонали. Результат, который я ищу:

[[-2], [9, 5], [3,-6, 3], [-1, 2, 5, 2], [8, 7, 1], [-4, 3], [8],
 [2], [3,1], [5, 5, 3], [-2, -6, 7, 8], [9, 2, -4], [3, 8], [-1]]
44
задан BioGeek 19 August 2011 в 13:34
поделиться