2017-03-02 35 views
2

Ich habe eine Situation mit einer Doppelschleife in python3.6.Doppelschleife Python mit Matrix

Ich habe eine Matrix mit String-Werten, alle die Position in der Matrix sind nicht voll. So habe ich viele Positionen mit juste '' char. Ich möchte den ersten Wert jeder Zeile in der Matrix nehmen. Zu tun, dass ich eine doppelte Verständnis Liste wie diese versucht haben:

matrix = data[1:,6:68] 
price = [[int(matrix[i,j]) if j!='' for j in matrix[i][j] ] for i in matrix[i]] 

Aber wenn ich es laufen, erhalte ich diesen Fehler:

price = [[int(matrix[i,j]) if j!='' for j in matrix[i][j] ] for i in matrix[i]] 
              ^
SyntaxError: invalid syntax 

Und ich verstehe nicht, warum es nicht Arbeit.

Könnten Sie mir bitte helfen?

C.

+0

können Sie eine Beispieldaten von "Daten" bereitstellen? – YOBA

+0

zu Ihrem Fehler ....... Preis = [[int (Matrix [i, j]) für j in Matrix [i] [j] wenn j! = ''] Für i in Matrix [i]]. ......... –

+0

Hier, für i in Matrix [i] gibt eine Liste und wenn Sie es als Matrix verwenden [i] [j] wird Fehler werfen !! –

Antwort

0

Der Fehler hier [[int(matrix[i,j]) if j!='' for j in matrix[i][j] ] for i in matrix[i]]
ist, int(matrix[i,j]) if j!='' und dann durch matrix[i,j] gefolgt, wo die Variable i eine Liste als Ergebnis des ersten Liste Verständnisses und wird daher die folgenden Fehler werfen ..

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list indices must be integers, not tuple 

Daher

[i for i in matrix] #gives each row of matrix! 
[[j for j in i if j!=''][0] for i in matrix] #gives all elements in each row that is not null. 

so,

[[j for j in i if j!=''][0] for i in matrix] #first element of each row that isn't null! 

Beispiel IO:

>>> matrix 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> [[j for j in i if j!=''][0] for i in matrix] 
[1, 4, 7] 
+0

Danke, es ist perfekt. Das entspricht was ich will !!!! –

+0

Wenn Sie der Meinung sind, dass die Antwort zu Ihrer Frage passend ist, nehmen Sie sie bitte wie hier [http://stackoverflow.com/tour] an. –

+0

Vielen Dank die Zeitverzögerung :-) –

0

der Regel in einem Verständnis kommt der Zustand nach dem Iterator. d. h.

matrix = data[1:,6:68] 
price = [[int(matrix[i,j]) for j in matrix[i][j] if j!='' ] for i in matrix[i]] 
+0

Hier, für i in Matrix [i ] gibt eine Liste und wenn Sie es als Matrix verwenden [i] [j] wird Fehler !! –