2d-array der Listen in python
Ich versuche zum erstellen einer 2d-matrix so, dass jede Zelle enthält eine Liste von strings.
Matrix Dimensionen bekannt sind, vor der Schöpfung, und ich brauche, um Zugang zu allen element-von Anfang an (nicht Auffüllen einer matrix dynamisch). => ich denke, eine Art von preallocation der Platz benötigt wird.
Zum Beispiel, würde ich mag, um eine 2X2-matrix:
[['A','B'] ['C'];
['d'] ['e','f','f']]
mit Unterstützung von klassischen matrix-Operationen, wie
(Matrix[2][2]).extend('d')
oder
tmp = Matrix[2][2]
tmp.extend('d')
Matrix[2][2] = tmp
manipulieren Zellen mit Inhalt.
Wie das zu erreichen ist es in python?
btw, ich denke, Sie sollten beginnen mit einer grundlegenden python-tutorial, diese Frage wird klar sein, sobald Sie gelernt, die Grundlagen in python
InformationsquelleAutor Nik | 2010-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genauso wie Sie es geschrieben hat:
Denke nur über die 2D-matrix als Liste von Listen.
InformationsquelleAutor Klark
Können Sie entweder tun es mit der basic:
oder Sie können es sehr genericially
In der defaultdict Fall müssen Sie eine beliebige matrix, die Sie verwenden können, jeder Größe und alle Elemente arrays sind, werden entsprechend manipulieren.
m = defaultdict(lambda : defaultdict(list)) - ist die beste für meine Zwecke!
können Sie erklären, über
m = defaultdict(lambda : defaultdict(list))
?defaultdict()
nimmt eine Funktion für einen parameter um das element zu erstellen, mitlambda:defaultdict(list)
ist das erstellen einer Funktion, die keine Parameter Rückgabe einer Liste. Siehe docs.python.org/2/library/collections.html#defaultdict-objectsInformationsquelleAutor koblas
Zunächst, was Sie beschreiben, ist eigentlich eine 3-dimensionale matrix, da jede 'Zelle' hat auch eine dimension, deren
kth
element derjth
Spalte derith
Zeile zugegriffen werden konnte übermatrix[i][j][k]
.Unabhängig, wenn Sie möchten, um preallocate eine 2X2-matrix mit jeder Zelle initialisiert zu leerer Liste, diese Funktion es für Sie tun:
Aber Sie denken vielleicht, dass es nicht funktioniert, weil ich merkte, dass Sie sagte, dass Sie möchten, um eine 2X2-matrix wie diese:
und in der Lage sein zu verwenden "traditionellen matrix-access operations", um dies zu tun:
Problem ist, dass nicht die Arbeit selbst für die matrix angezeigt und würde trotzdem nicht für eine Feste, 2X2, da sowohl die Zeile und Spalte, die Abmessungen sind aus der Palette in jedem Fall. In Python werden alle Sequenzen sind indiziert von null, so dass die gültigen Indizes für eine matrix mit zwei Zeilen zwei Elemente sind jeweils
[0][0]
,[0][1]
,[1][0]
, und[1][1]
(ohne Berücksichtigung der möglichen negativen Indizes, die eine Besondere Bedeutung haben in Python). Also mitMatrix[2][2]
ist ein Versuch, Zugriff auf die Dritten Spalte der Dritten Zeile der matrix, die nicht existieren und würde nicht einmal in einem vorbelegt mit Abmessungen von 2X2.Alles wäre in Ordnung, wenn Sie geändert haben, die Anweisung zu so etwas wie dies mit einer der gültigen Paare von Indizes (und überflüssige Klammern entfernt):
da wäre es nicht auslösen
IndexError
und statt sich in der 2X2-matrix zu:Bonus Utility
Sie nicht für ein zu stellen, aber hier ist eine praktische Funktion, die ich schrieb, um zu helfen, Druck aus beliebig große 2D-Matrizen beliebiger Art (dargestellt als geschachtelte
lists
):Hoffe, das hilft.
InformationsquelleAutor martineau
Ist eine option, um eine eigene Klasse schreiben, wo Sie überladen Sie den operator []. Schau hier: http://www.penzilla.net/tutorials/python/classes/ .
Acessing ein 2d-elment in 1d ist y * rowSize + x. Erweitern Sie die Elemente, indem Sie einen append-Funktion, die benutzen würde, append rowSize Zeiten.
Wenn Sie möchten, erstellen Sie eine 2d-matrix, und Sie müssen preallocate als, können Sie das folgende tun:
Können Sie ersetzen Keines mit dem Wert, den Sie wollen. Und Sie verwenden können .erweitern, um weitere Werte hinzufügen.
x
undy
sind jeweils3
.wenn Sie eine 3D-matrix, wird dies für Sie arbeiten: [[ [0]*x for i in range(y) ] for j in range(z)]
InformationsquelleAutor inf.ig.sh
Hey Leute, nicht sicher, ob dies hilfreich ist oder nicht, aber dies ist, wie ich erzeugt eine 2d-Liste mit Python ist3.4 hoffe, dies ist hilfreich,
InformationsquelleAutor Craftygeek