897 Stimmen

Wie definiert man ein zweidimensionales Array?

Ich möchte ein zweidimensionales Array ohne eine initialisierte Länge wie folgt definieren:

Matrix = [][]

Dies führt jedoch zu einem Fehler:

IndexError: Listenindex außerhalb des Bereichs

18 Stimmen

Man muss nicht Arrays definieren oder irgendetwas anderes. Sie können jedoch mehrdimensionale Sequenzen erstellen, wie die Antworten hier zeigen. Denken Sie daran, dass Python Variablen sind untypisiert, aber Werte sind stark typisiert.

2 Stimmen

Ich bin verwirrt. Von anderen Sprachen kommend: es IST ein Unterschied zwischen einem 1D-Array, das 1D-Arrays enthält und einem 2D-Array. Und AFAIK gibt es keine Möglichkeit, ein mehrdimensionales Array (oder Liste) in Python zu haben. Sollte hier gesagt werden...

4 Stimmen

49voto

wberry Punkte 17277

In Python werden Sie eine Liste von Listen erstellen. Sie müssen die Dimensionen nicht im Voraus deklarieren, aber Sie können es. Zum Beispiel:

matrix = []
matrix.append([])
matrix.append([])
matrix[0].append(2)
matrix[1].append(3)

Jetzt ist matrix[0][0] == 2 und matrix[1][0] == 3. Sie können auch die Syntax des Listenverständnisses verwenden. In diesem Beispiel wird sie zweimal verwendet, um eine "zweidimensionale Liste" zu erstellen:

from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]

6 Stimmen

extend wäre auch im ersten Fall hilfreich: Wenn Sie mit m = [[]] dann könnten Sie die innere Liste ergänzen (eine Zeile erweitern) mit m[0].extend([1,2]) und ergänzen Sie die äußere Liste (fügen Sie eine neue Zeile an) mit m.append([3,4]) Diese Operationen würden Ihnen folgende Möglichkeiten bieten [[1, 2], [3, 4]] .

33voto

unknownerror Punkte 1935
rows = int(input())
cols = int(input())

matrix = []
for i in range(rows):
  row = []
  for j in range(cols):
    row.append(0)
  matrix.append(row)

print(matrix)

Warum ein so langer Code, und das auch noch in Python fragen Sie?

Vor langer Zeit, als ich mich mit Python noch nicht auskannte, sah ich die einzeiligen Antworten zum Schreiben einer 2D-Matrix und sagte mir, dass ich nie wieder eine 2D-Matrix in Python verwenden werde. (Diese einzelnen Zeilen waren ziemlich beängstigend und gaben mir keine Informationen darüber, was Python tat. Beachten Sie auch, dass ich diese Abkürzungen nicht kenne).

Wie auch immer, hier ist der Code für einen Anfänger, der von C, CPP und Java Hintergrund kommt

Hinweis für Python-Liebhaber und Experten: Bitte stimmen Sie nicht ab, nur weil ich einen detaillierten Code geschrieben habe.

25voto

Fabian Punkte 5236

Die akzeptierte Antwort ist gut und richtig, aber ich habe eine Weile gebraucht, um zu verstehen, dass ich damit auch ein völlig leeres Feld erstellen kann.

l =  [[] for _ in range(3)]

führt zu

[[], [], []]

25voto

utdemir Punkte 25584

Sie sollten eine Liste von Listen erstellen, und das geht am besten mit verschachtelten Comprehensions:

>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

Auf Ihrem [5][5] Beispiel: Sie erstellen eine Liste mit einer Ganzzahl "5" und versuchen, auf das 5. Element zuzugreifen, was natürlich einen Indexfehler auslöst, da es kein 5. Element gibt:

>>> l = [5]
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

0 Stimmen

Die Reihenfolge für row_index('i') und column_index('j') ist wie folgt: '>>> matrix = [[0 for column_index in range(5)] for row_index in range(5)]'

17voto

Michael Punkte 685

Dies ist, wie ich in der Regel 2D-Arrays in Python erstellen.

col = 3
row = 4
array = [[0] * col for _ in range(row)]

Ich finde diese Syntax im Vergleich zu zwei for-Schleifen in einem Listenverständnis leicht zu merken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X