Стандартный тип списка 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.
Кроме того, функция использует механизм, с помощью которого список может быть расширен и передан, если аргумент функции помечен звездочкой.
- СООТВЕТСТВУЮЩИЕ:Расширение и передача списков, кортежей и словарей в качестве аргументов функций в Python
Транспозиции могут быть сделаны следующим образом.
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(), который преобразует кортеж в список в нотации list comprehension.
- СООТВЕТСТВУЮЩИЕ:Как использовать понимание списков в 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(), а затем кортеж преобразуется в список с помощью нотации 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]]