Skip to content

Transposition d’une liste 2D en Python (permutation des lignes et des colonnes)

Un tableau à deux dimensions peut être représenté par une liste de listes à l’aide du type de liste intégré Python.

Voici quelques façons d’échanger les lignes et les colonnes de cette liste à deux dimensions.

  • Convertir en numpy.ndarray et transposer avec T
  • Convertir en pandas.DataFrame et transposer avec T
  • Transposer avec la fonction intégrée zip()

Il est plus facile d’utiliser NumPy et pandas, mais si vous ne souhaitez pas importer NumPy ou pandas uniquement pour la transposition, vous pouvez utiliser la fonction zip().

La liste bidimensionnelle originale est définie comme suit :

import numpy as np
import pandas as pd

l_2d = [[0, 1, 2], [3, 4, 5]]

Convertir en numpy.ndarray et transposer avec T

Créez un tableau NumPy ndarray à partir de la liste 2D d’origine et obtenez l’objet transposé avec l’attribut T.

Si vous voulez un objet de type liste, convertissez-le en liste avec la méthode tolist().

arr_t = np.array(l_2d).T

print(arr_t)
print(type(arr_t))
# [[0 3]
#  [1 4]
#  [2 5]]
# <class 'numpy.ndarray'>

l_2d_t = np.array(l_2d).T.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

En plus de l’attribut T, vous pouvez également utiliser la méthode transpose() de ndarray et la fonction numpy.transpose(). Veuillez vous référer à l’article suivant pour plus de détails tels que le traitement des tableaux multidimensionnels de plus de trois dimensions.

Convertir en pandas.DataFrame et transposer avec T

Créez pandas.DataFrame à partir de la liste 2D d’origine et obtenez l’objet transposé avec l’attribut T.

Si vous voulez un objet de type liste, récupérez numpy.ndarray avec l’attribut values ​​et convertissez-le en liste avec la méthode tolist().

df_t = pd.DataFrame(l_2d).T

print(df_t)
print(type(df_t))
#    0  1
# 0  0  3
# 1  1  4
# 2  2  5
# <class 'pandas.core.frame.DataFrame'>

l_2d_t = pd.DataFrame(l_2d).T.values.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

Transposer avec la fonction intégrée zip()

Vous pouvez transposer une liste à deux dimensions en utilisant la fonction intégrée zip().

zip() est une fonction qui renvoie un itérateur qui résume les multiples itérables (liste, tuple, etc.).

De plus, utilisez * qui vous permet de décompresser la liste et de passer ses éléments à la fonction.

l_2d_t_tuple = list(zip(*l_2d))

print(l_2d_t_tuple)
print(type(l_2d_t_tuple))
# [(0, 3), (1, 4), (2, 5)]
# <class 'list'>

print(l_2d_t_tuple[0])
print(type(l_2d_t_tuple[0]))
# (0, 3)
# <class 'tuple'>

Les éléments sont tuple. Si vous voulez créer une liste, utilisez list() et list comprehensions.

l_2d_t = [list(x) for x in zip(*l_2d)]

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

print(l_2d_t[0])
print(type(l_2d_t[0]))
# [0, 3]
# <class 'list'>

Le détail est le suivant.

Les éléments de la liste sont développés avec *, les éléments développés sont combinés avec la fonction zip() et le tuple est converti en liste dans la compréhension de liste.

print(*l_2d)
# [0, 1, 2] [3, 4, 5]

print(list(zip([0, 1, 2], [3, 4, 5])))
# [(0, 3), (1, 4), (2, 5)]

print([list(x) for x in [(0, 3), (1, 4), (2, 5)]])
# [[0, 3], [1, 4], [2, 5]]