Linha única aninhada para loops

| |

Escreveu esta função em python que transpõe uma matriz:

def transpose(m): height = len(m) width = len(m[0]) return [ [ m[i] ][j] for i in range(0, height) ] for j in range(0, width) ] 

No processo percebi que não entendo completamente como uma única linha aninhada Os loops for são executados. Ajude-me a entender respondendo às seguintes perguntas:

  1. Qual é a ordem em que esse loop for é executado?
  2. Se eu tivesse um loop for triplo aninhado , que ordem ele executaria?
  3. Qual seria igual ao loop for igual não aninhado?

Dado,

[ function( i,j) for i,j in object ] 
  1. Que tipo de objeto deve ser para usar esta estrutura de loop for?
  2. Qual é a ordem em que i e j são atribuídos a elementos no objeto?
  3. Pode ser simulado por uma estrutura de loop for diferente?
  4. Esse loop for pode ser aninhado com uma estrutura semelhante ou diferente para loop? E como ficaria?

Addi informações adicionais também são apreciadas.