Š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.
- Previesť na pole NumPy
.T
Transponujte s týmto.
pandas.DataFrame
Previesť na túto.T
Transponujte 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.
- SÚVISIACE:Rozšírenie a odovzdávanie zoznamov, tuplov a slovníkov ako argumentov funkcií v jazyku Python
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.
- SÚVISIACE:Ako používať zoznamy jazyka Python
- SÚVISIACE:Prevod zoznamov a tuplov na seba v jazyku Python: list(), tuple()
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]]