Obtenga todas las diagonales en una matriz / lista de listas en Python

Estoy buscando una forma pitónica para obtener todas las diagonales de una matriz (cuadrada), representada como una lista de listas.

Supongo que tengo la siguiente matriz:

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

Las diagonales grandes son fáciles:

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]

Pero tengo problemas para encontrar una manera de generar todas las diagonales. El resultado que estoy buscando es:

[[-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]]

Respuestas a la pregunta(7)

Su respuesta a la pregunta