Tukar baris dan lajur tatasusunan dua dimensi jenis senarai Python

Perniagaan

Jenis senarai Python standard boleh mewakili tatasusunan dua dimensi dengan senarai senarai.

Bahagian ini menerangkan cara menukar baris dan lajur tatasusunan dua dimensi ini.

    1. Tukar kepada tatasusunan NumPy
    2. .TTranspose dengan ini.
    1. pandas.DataFrameTukar kepada ini
    2. .TTranspose dengan ini.
  • Transposisi dengan fungsi terbina dalam zip()

Lebih mudah untuk menggunakan NumPy atau panda, tetapi jika anda tidak mahu mengimport NumPy atau panda hanya untuk transposisi, anda boleh menggunakan fungsi zip() untuk menukar.

Tatasusunan dua dimensi asal ditakrifkan seperti berikut

import numpy as np
import pandas as pd

l_2d = [[0, 1, 2], [3, 4, 5]]

Ditukar kepada tatasusunan NumPy ndarray dan ditukar dengan .T

Hasilkan tatasusunan NumPy ndarray daripada tatasusunan dua dimensi yang asal dan dapatkan objek tertranspos dengan atribut .T.

Jika anda mahukan objek jenis senarai Python pada akhirnya, tukarkannya kepada senarai dengan kaedah 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'>

Selain atribut .T, kaedah ndarray transpose() dan fungsi numpy.transpose() juga boleh digunakan.

Ditukar kepada panda.DataFrame dan ditukar dengan .T

Hasilkan panda.DataFrame daripada tatasusunan dua dimensi yang asal dan dapatkan objek transposed dengan atribut .T.

Jika anda mahukan objek jenis senarai Python pada akhirnya, dapatkan numpy.ndarray dengan atribut nilai, dan kemudian tukarkannya kepada senarai dengan kaedah 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'>

Transposisi dengan fungsi terbina dalam zip()

Mengubah tatasusunan dua dimensi menggunakan fungsi terbina dalam zip().

zip() ialah fungsi yang mengembalikan iterator yang meringkaskan elemen berbilang iterable (senarai, tupel, dll.). Ia digunakan apabila menjalankan berbilang senarai dalam gelung for, sebagai contoh.

Selain itu, fungsi menggunakan mekanisme di mana senarai boleh dikembangkan dan diluluskan jika hujah fungsi ditandakan dengan asterisk.

Transposisi boleh dibuat seperti berikut.

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'>

Seperti yang ada, unsur-unsur di dalamnya adalah tupel. Oleh itu, jika anda ingin menjadikannya senarai, gunakan list(), yang menukar tuple kepada senarai dalam tatatanda pemahaman senarai.

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'>

Berikut ialah pecahan langkah demi langkah proses tersebut.

Unsur-unsur senarai dikembangkan dengan asterisk, unsur-unsur dikembangkan dikumpulkan bersama-sama dengan fungsi zip(), dan kemudian tuple ditukar kepada senarai dengan tatatanda pemahaman senarai.

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]]