2016-12-08 5 views
0

Ich versuche, einen Code zu schreiben, die eine ganz einfache Sache mit Python: Ich habe eine Datei mit 10 000 Zeilen, jede Zeile enthält zwischen 12 und 16 Zahlen, und ich möchte all diese setzen Daten in ein großes Array von Array (table10000 * 16), so schrieb ich eine kleine Funktion: (PS: line [i] die i-te Zeile meiner Datei als String)Verwalten von Doppel-Array Python

def tabl(self):   
    self.table=[[0]*16]*len(self.line) 
    for k,vertex in enumerate(self.line) : 
     try: 
      inf=[float(i) for i in vertex.split(" ")] 
     except: 
      pass 
     for j,data in enumerate(inf): 
      self.table[k][j]=data 

das Problem ist, Anstatt den Wert von Daten in die Zelle (k, j) meiner doppelten Array-Tabelle zu setzen, setzt python den Wert von Daten in alle Zellen (n, j) für n in [0,10 000] ... ich don Ich verstehe nicht, wo ich es ihm gesagt habe.

Vielen Dank.

Antwort

0

Wenn Sie initialisieren Tisch wie so:

table=[[0]*16]*len(self.line) 

es eine Reihe von Referenzen erstellt. So versuchen Sie das:

self.table = [[ 0 for _ in range(16)] for _ in range(len(self.line))] 
0

Das Problem ist hier: self.table=[[0]*16]*len(self.line) Python nicht diesen [0]*16 Array kopiert, aber Kopien Verweise darauf. Dann haben Sie ein Array, das viele Referenzen auf das gleiche Subarray enthält. Beispiel:

>>> a = [[]] * 2 
>>> a[0] is a[1] 
True 
>>> 
+0

Vielen Dank !! –