Intercanvia files i columnes d’una matriu bidimensional del tipus de llista Python

Negocis

El tipus de llista Python estàndard pot representar una matriu bidimensional mitjançant una llista de llistes.

Aquesta secció explica com intercanviar les files i columnes d’aquesta matriu bidimensional.

    1. Converteix a matriu NumPy
    2. .TTransposa amb això.
    1. pandas.DataFrameConverteix-te a això
    2. .TTransposa amb això.
  • Transposició amb funció integrada zip()

És més fàcil utilitzar NumPy o pandas, però si no voleu importar NumPy o pandas només per a la transposició, podeu utilitzar la funció zip() per transposar.

La matriu bidimensional original es defineix de la següent manera

import numpy as np
import pandas as pd

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

Convertit a ndarray de matriu NumPy i transmès amb .T

Genereu una matriu ndarray NumPy a partir de la matriu bidimensional original i obteniu l’objecte transposat amb l’atribut .T.

Si al final voleu un objecte de tipus llista Python, convertiu-lo a una llista amb el mètode 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'>

A més de l’atribut .T, també es poden utilitzar el mètode ndarray transpose() i la funció numpy.transpose().

Convertit a pandas.DataFrame i transposat amb .T

Genereu un pandas.DataFrame a partir de la matriu bidimensional original i obteniu l’objecte transposat amb l’atribut .T.

Si al final voleu un objecte de tipus llista Python, obteniu numpy.ndarray amb l’atribut values ​​i després convertiu-lo en una llista amb el mètode 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'>

Transposició amb funció integrada zip()

Transposa una matriu bidimensional mitjançant la funció integrada zip().

zip() és una funció que retorna un iterador que resumeix els elements de múltiples iterables (llistes, tuples, etc.). S’utilitza quan s’executen diverses llistes en un bucle for, per exemple.

A més, la funció utilitza un mecanisme pel qual la llista es pot ampliar i passar si l’argument de la funció està marcat amb un asterisc.

Les transposicions es poden fer de la següent manera.

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'>

Tal com és, els elements de dins són tuples. Per tant, si voleu fer-ne una llista, utilitzeu list(), que converteix una tupla en una llista en notació de comprensió de llista.

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'>

El següent és un desglossament pas a pas del procés.

Els elements de la llista s’amplien amb un asterisc, els elements expandits s’agrupen amb la funció zip() i després la tupla es converteix en una llista amb notació de comprensió de llista.

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]]