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