Стандартний тип списку 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]]