Стандартны тып спісу Python можа прадстаўляць двухмерны масіў спісам спісаў.
У гэтым раздзеле тлумачыцца, як памяняць месцамі радкі і слупкі гэтага двухмернага масіва.
- Пераўтварыць у масіў NumPy
.T
Транспанаваць з гэтым.
pandas.DataFrame
Пераўтварыце ў гэта.T
Транспанаваць з гэтым.
- Транспазіцыя з убудаванай функцыяй zip()
Прасцей выкарыстоўваць NumPy або pandas, але калі вы не хочаце імпартаваць NumPy або pandas толькі для транспазіцыі, вы можаце выкарыстоўваць функцыю zip() для транспанавання.
Зыходны двухмерны масіў вызначаецца наступным чынам
import numpy as np
import pandas as pd
l_2d = [[0, 1, 2], [3, 4, 5]]
Ператвораны ў масіў NumPy ndarray і транспанаваны з .T
Стварыце масіў NumPy ndarray з зыходнага двухмернага масіва і атрымайце транспанаваны аб’ект з атрыбутам .T.
Калі ў рэшце рэшт вы хочаце атрымаць аб’ект спісавага тыпу Python, пераўтварыце яго ў спіс метадам 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'>
У дадатак да атрыбуту .T таксама можна выкарыстоўваць метад ndarray transpose() і функцыя numpy.transpose().
Ператвораны ў pandas.DataFrame і транспанаваны з .T
Стварыце pandas.DataFrame з зыходнага двухмернага масіва і атрымайце транспанаваны аб’ект з атрыбутам .T.
Калі вы хочаце, каб у рэшце рэшт быў аб’ект спісавага тыпу Python, атрымайце numpy.ndarray з атрыбутам values, а затым пераўтварыце яго ў спіс з дапамогай метаду 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'>
Транспазіцыя з убудаванай функцыяй zip()
Транспануе двухмерны масіў з дапамогай убудаванай функцыі zip().
zip() – гэта функцыя, якая вяртае ітэратар, які абагульняе элементы некалькіх ітэрабельных аб’ектаў (спісы, картэжы і г.д.). Ён выкарыстоўваецца, напрыклад, пры запуску некалькіх спісаў у цыкле for.
Акрамя таго, функцыя выкарыстоўвае механізм, дзякуючы якому спіс можа быць пашыраны і перададзены, калі аргумент функцыі пазначаны зорачкай.
Транспазіцыі можна зрабіць наступным чынам.
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'>
Як і ёсць, элементы ўнутры ўяўляюць сабой картэжы. Такім чынам, калі вы хочаце зрабіць яго спісам, выкарыстоўвайце list(), які пераўтворыць картэж у спіс у натацыі разумення спісу.
- па тэме:Як выкарыстоўваць разуменне спісу Python
- па тэме:Пераўтварэнне спісаў і картэжаў адзін у аднаго ў 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'>
Ніжэй прыведзена паэтапная разбіўка працэсу.
Элементы спісу разгортваюцца зорачкай, разгорнутыя элементы групуюцца разам з дапамогай функцыі zip(), а затым картэж пераўтворыцца ў спіс з абазначэннем разумення спісу.
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]]