296 votes

liste de listes python transposée sans zip (* m)

par exemple:

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

et le résultat que je recherche est

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

et pas

 r=[(1,4,7),(2,5,8),(3,6,9)]
 

Très appréciée

423voto

jena Points 1736

Que diriez-vous

 map(list, zip(*l))
--> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 

?

73voto

SiggyF Points 5320

Une façon de le faire est avec la transposition numpy.

 >>> numpy.asarray(l).T.tolist()
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 

Ou un autre sans zip:

 >>> map(list,map(None,*l))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 

67voto

inspectorG4dget Points 25092

De manière équivalente à la solution de Jena:

 >>> l=[[1,2,3],[4,5,6],[7,8,9]]
>>> [list(i) for i in zip(*l)]
... [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 

29voto

matchew Points 5196
Juste pour le fun

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X