Standardní typ seznamu jazyka Python může reprezentovat dvourozměrné pole pomocí seznamu seznamů.
Tato část vysvětluje, jak prohodit řádky a sloupce tohoto dvourozměrného pole.
- Převést na pole NumPy
.T
Transponujte s tímto.
pandas.DataFrame
Převést na tuto.T
Transponujte s tímto.
- Transpozice pomocí vestavěné funkce zip()
Jednodušší je použít NumPy nebo pandas, ale pokud nechcete importovat NumPy nebo pandas jen kvůli transpozici, můžete k transpozici použít funkci zip().
Původní dvourozměrné pole je definováno takto
import numpy as np
import pandas as pd
l_2d = [[0, 1, 2], [3, 4, 5]]
Převedeno na pole NumPy ndarray a transponováno pomocí .T
Vygeneruje pole NumPy ndarray z původního dvourozměrného pole a získá transponovaný objekt s atributem .T.
Pokud chcete na konci získat objekt typu seznam v jazyce Python, převeďte jej dále na seznam pomocí metody 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'>
Kromě atributu .T lze použít také metodu ndarray transpose() a funkci numpy.transpose().
Převedeno na pandas.DataFrame a transponováno pomocí .T
Vygenerujte pandas.DataFrame z původního dvourozměrného pole a získejte transponovaný objekt s atributem .T.
Pokud chcete na konci získat objekt typu seznamu v jazyce Python, získejte numpy.ndarray s atributem values a poté jej převeďte na seznam pomocí metody 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'>
Transpozice pomocí vestavěné funkce zip()
Transponuje dvourozměrné pole pomocí vestavěné funkce zip().
zip() je funkce, která vrací iterátor, který shrnuje prvky více iterovatelných položek (seznamů, tuplů atd.). Používá se například při spouštění více seznamů v cyklu for.
Funkce navíc používá mechanismus, pomocí kterého lze seznam rozbalit a předat, pokud je argument funkce označen hvězdičkou.
Transpozice lze provést 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'>
V tomto stavu jsou prvky uvnitř tuply. Pokud z něj tedy chcete udělat seznam, použijte funkci list(), která převede tuple na seznam v notaci list comprehension.
- SOUVISEJÍCÍ:Jak používat seznamy v jazyce Python
- SOUVISEJÍCÍ:Převod seznamů a tuplů na sebe v jazyce 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'>
V následujícím textu je postup popsán krok za krokem.
Prvky seznamu se rozbalí pomocí hvězdičky, rozbalené prvky se seskupí pomocí funkce zip() a poté se tuple převede na seznam pomocí notace pro porozumění seznamu.
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]]