Ανταλλαγή γραμμών και στηλών ενός δισδιάστατου πίνακα τύπου λίστας Python

Επιχείρηση

Ο τυπικός τύπος λίστας της Python μπορεί να αναπαραστήσει έναν δισδιάστατο πίνακα με μια λίστα από λίστες.

Αυτή η ενότητα εξηγεί πώς να ανταλλάσσετε τις γραμμές και τις στήλες αυτού του δισδιάστατου πίνακα.

    1. Μετατροπή σε πίνακα NumPy
    2. .TΜεταθέστε με αυτό.
    1. pandas.DataFrameΜετατρέψτε σε αυτό
    2. .TΜεταθέστε με αυτό.
  • Μετατόπιση με την ενσωματωμένη συνάρτηση zip()

Είναι ευκολότερο να χρησιμοποιήσετε το NumPy ή το pandas, αλλά αν δεν θέλετε να εισαγάγετε το NumPy ή το pandas μόνο για τη μετατόπιση, μπορείτε να χρησιμοποιήσετε τη συνάρτηση zip() για τη μετατόπιση.

Ο αρχικός δισδιάστατος πίνακας ορίζεται ως εξής

import numpy as np
import pandas as pd

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

Μετατρέπεται σε NumPy array 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(), η οποία μετατρέπει μια πλειάδα σε λίστα σε συμβολισμό κατανόησης λίστας.

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