2012-04-11 3 views
2

Ich möchte ein Array mit X zweidimensionalen Elementen initialisieren. Wenn zum Beispiel X = 3 ist, möchte ich, dass es [[0,0], [0,0], [0,0]] ist. Ich weiß, dass [0] * 3 [0, 0, 0] ergibt, aber wie mache ich das für zweidimensionale Elemente?Wie initialisiere ich ein eindimensionales Array von zweidimensionalen Elementen in Python?

+1

Die meiste Zeit in Python, wenn Sie in Bezug auf die „Initialisierung“ einen Behälter zu einem Bündel von 0s denken, sie es falsch machen. –

+0

Nun, ich übe für Google Code Jam und ich muss in einem Strom von Zahlen wie 2, 3, 1, 4, 5, 2 lesen und es in [[2,3], [1,4], [5,2]]. Was würdest du sonst noch vorschlagen? – Kobi

+1

Ich würde vorschlagen, die Nummern an leere Listen anzufügen, wie sie empfangen werden. –

Antwort

6

Try this:

m = [[0] * 2 for _ in xrange(3)] 

In dem obigen Code, man denke an die 3 als die Anzahl der Zeilen in einer Matrix, und die 2 als die Anzahl der Spalten. Der Wert 0 ist der Wert, den Sie zum Initialisieren der Elemente verwenden möchten. Beachten Sie Folgendes: Wenn Sie Python 3 verwenden, verwenden Sie range anstelle von xrange.

Für eine allgemeinere Lösung, verwenden Sie diese Funktion:

def create_matrix(m, n, initial=0): 
    return [[initial] * n for _ in xrange(m)] 

Für den besonderen Fall der Frage:

m = create_matrix(3, 2) 
print m 
> [[0, 0], [0, 0], [0, 0]] 

Alternativ und wenn Sie nicht numpy nichts dagegen tun verwenden, können Sie Verwenden Sie die numpy.zeros() Funktion wie in Mellkor's Antwort gezeigt.

0

Ich glaube, dass es [[0,0],]*3

+0

Die Art, wie es funktioniert, ist, dass es das Zeug innerhalb der Liste als Liste zu sich selbst mehrfach hinzufügt, im Wesentlichen ist [[0,0],] + [[0,0],] + [[0,0],] –

+1

Es scheint auch ohne das nachgestellte Komma zu funktionieren. – Interrobang

+6

Das macht eine Liste mit drei Referenzen auf die gleiche Liste, also ist es nicht das gleiche wie '[[0,0],] + [[0,0],] + [[0,0],]'. Versuchen Sie, eines der Elemente zu ändern, und Sie werden sehen, dass sich alle drei Unterlisten ändern. – DSM

3

Ich denke, numpy.zeros ist nützlich für solche. Sprich:

x=4 

numpy.zeros((x,x)) 

geben Ihnen:

Array ([[0, 0, 0, 0], [0, 0, 0, 0] , [0, 0, 0, 0], [0, 0, 0, 0]])

+0

Ich habe mich um ein paar Sekunden geschlagen. – Akavall

+0

Hehe .. Entschuldigung :) – Mellkor

0

Verwendung des Konstrukts

[[0,0]]*3

funktioniert gut und gibt folgende Möglichkeiten:

[[0, 0], [0, 0], [0, 0]]

Verwandte Themen