Consider a $3\times 3$ matrix represented by a list of lists:
M = [[1,2,3],
[4,5,6],
[7,8,9]]
Without using list comprehension, the transpose of this matrix could be built up by looping over the rows and columns:
MT = [[0,0,0], [0,0,0], [0,0,0]]
for ir in range(3):
for ic in range(3):
MT[ic][ir] = M[ir][ic]
With one list comprehension, the transpose can be constructed as
MT = []
for i in range(3):
MT.append([row[i] for row in M])
where rows of the transposed matrix are built from the columns (indexed with i=0,1,2
) of each row in turn from M
). The outer loop here can be expressed as a list comprehension of its own:
MT = [[row[i] for row in M] for i in range(3)]
Note, however, that NumPy provides much easier to use methods for manipulating matrices - see Section 6.5 of the book.