Výmena riadkov a stĺpcov dvojrozmerného poľa typu Python list

obchodné

Štandardný typ zoznamu v jazyku Python môže reprezentovať dvojrozmerné pole pomocou zoznamu zoznamov.

Táto časť vysvetľuje, ako vymeniť riadky a stĺpce tohto dvojrozmerného poľa.

    1. Previesť na pole NumPy
    2. .TTransponujte s týmto.
    1. pandas.DataFramePreviesť na túto
    2. .TTransponujte s týmto.
  • Transpozícia pomocou vstavanej funkcie zip()

Jednoduchšie je použiť NumPy alebo pandas, ale ak nechcete importovať NumPy alebo pandas len kvôli transpozícii, môžete na transpozíciu použiť funkciu zip().

Pôvodné dvojrozmerné pole je definované takto

import numpy as np
import pandas as pd

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

Prevedené na NumPy pole ndarray a transponované pomocou .T

Generovanie NumPy poľa ndarray z pôvodného dvojrozmerného poľa a získanie transponovaného objektu s atribútom .T.

Ak chcete na konci získať objekt typu Python list, preveďte ho ďalej na zoznam pomocou metódy 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'>

Okrem atribútu .T možno použiť aj metódu ndarray transpose() a funkciu numpy.transpose().

Prevedené na pandas.DataFrame a transponované pomocou .T

Vygenerujte pandas.DataFrame z pôvodného dvojrozmerného poľa a získajte transponovaný objekt s atribútom .T.

Ak chcete na konci získať objekt typu Python list, získajte numpy.ndarray s atribútom values a potom ho preveďte na zoznam pomocou metódy 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'>

Transpozícia pomocou vstavanej funkcie zip()

Transponuje dvojrozmerné pole pomocou vstavanej funkcie zip().

zip() je funkcia, ktorá vracia iterátor, ktorý sumarizuje prvky viacerých iterabilít (zoznamov, tuplov atď.). Používa sa napríklad pri spúšťaní viacerých zoznamov v cykle for.

Okrem toho funkcia používa mechanizmus, pomocou ktorého možno zoznam rozšíriť a odovzdať, ak je argument funkcie označený hviezdičkou.

Transpozície možno vykonať takto.

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

Prvky vo vnútri sú tuple. Preto ak chcete, aby to bol zoznam, použite funkciu list(), ktorá konvertuje tuple na zoznam v notácii list comprehension.

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

Nasledujúci postup je rozdelený krok za krokom.

Prvky zoznamu sa rozšíria pomocou hviezdičky, rozšírené prvky sa zoskupia pomocou funkcie zip() a potom sa tuple prevedie na zoznam pomocou notácie list comprehension.

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]]
Copied title and URL