Bei der Suche nach einer pythischen Methode, eine Matrix zu drehen, stieß ich auf diese Antwort. Es gibt jedoch keine Erklärung dafür. Ich habe das Snippet hier kopiert:
%Vor%Wie funktioniert es?
[::-1]
kehrt die Liste um:
Jetzt verwenden wir zip
für alle Elemente der rev und hängen jedes zurückgegebene Tupel an rotiert an:
zip
wählt Elemente aus demselben Index von jedem iterablen Element aus (es wird nur bis zum Element mit minimaler Länge ausgeführt) und gibt sie als Tupel zurück.
Was ist *
:
*
wird zum Entpacken aller Elemente von rev
in zip
verwendet, also anstatt manuell zu tippen
rev[0], rev[1], rev[2]
, wir können einfach zip(*rev)
machen.
Die obige zip
-Schleife könnte auch geschrieben werden als:
Komplementär zu den Erklärungen von Ashwini und HennyH, hier ist eine kleine Figur, um den Prozess zu veranschaulichen.
[::-1]
slice die Liste der Liste um, wobei die gesamte Liste (also die ersten zwei Argumente können weggelassen werden) und der Schritt -1
. zip
eine Anzahl von Listen und gibt eine neue Liste mit umgekehrten Zeilen und Spalten zurück. Der *
sagt, dass die Liste der Listen in mehrere Listen entpackt ist. Wie zu sehen ist, werden diese beiden Operationen zusammen die Matrix drehen.
Für meine Erkundung:
%Vor%Was wäre, wenn hübsch gedruckt wäre:
%Vor% Zunächst erstellt zip(*m)
eine Liste aller Spalten in m
. Wie demonstriert durch:
Wie das funktioniert, ist zip
nimmt n Sequenzen und erhält das i-th
-Element von jedem und fügt es einem Tupel hinzu. So übersetzt in unsere Matrix m
, wobei jede Zeile durch eine Liste innerhalb von m
dargestellt wird, übergeben wir im Wesentlichen jede Zeile an zip
, die dann das erste Element aus jeder Reihe puts erhält Alle von ihnen in ein Tupel, dann wird jedes zweite Element aus jeder Zeile etc ... Letztendlich bekommen alle Spalte in m
ie:
Das würde jetzt so aussehen:
%Vor% Somit ist jede -Spalte in m
jetzt eine Zeile . Aber es ist nicht in der richtigen Reihenfolge (versuchen Sie, sich vorzustellen, in Ihrem Kopf drehen m
, um die Matrix oben zu bekommen, kann es nicht getan werden). Deshalb ist es notwendig, die ursprüngliche Matrix umzudrehen:
Was zu einer Matrix führt, die das Äquivalent von m
rotiert - 90 Grad.
Tags und Links python