Výměna řádků a sloupců dvourozměrného pole typu seznam v jazyce Python

Podnikání

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.

    1. Převést na pole NumPy
    2. .TTransponujte s tímto.
    1. pandas.DataFramePřevést na tuto
    2. .TTransponujte 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.

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