简体   繁体   中英

Python List Comprehensions - Transposing

I'm just starting out with list comprehensions by the reading the matrix transposing tutorial here . I understand the example, but I'm trying to figure out a way to transpose the matrix without hardcoding the range in.

matrix = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12]
]

lcomp = [[row[i] for row in matrix] for i in range(4)]
print(lcomp)

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] #result

Instead of range(4) , I want it to be able to figure out the the max number of elements that the largest nested array has. I tried placing a lambda but kept getting errors from it. Is it possible to do this in a one-liner?

You can use another comprehension! They're a very powerful tool.

[[row(i) for row in matrix] for i in range(max(len(r) for r in matrix))]

Assuming all sub lists have the same number of elements:

s = len(matrix[0])
lcomp = [[row[i] for row in matrix] for i in range(s)]

For sublists with mismatching lengths:

s = len(max(matrix, key=len))

On a side note, you could easily transpose your matrix with zip :

matrix_T = zip(*matrix) # wrap with list() for Python 3

Or use itertools.izip_longest for sublists with mismatching lengths.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM