2012-03-28 9 views
0

Ich habe eine Dual-Liste und ich frage mich, was es der beste Weg, um die Indizes der Nullen in dem ArrayPython Liste Indizes

board =[[1,2,0], 
    [2,1,2], 
    [1,1,0]] 

for boxes in board: 
    if 0 in boxes: 
     print boxes 

wie diese zu bekommen, sondern ich will Rückkehr haben [0, 2] [2,2]

+1

Was ist, wenn mehr als eine 0 in der Unterliste vorhanden ist? –

+5

Wenn "board" ein NumPy-Array wäre, könnten Sie 'zip (* numpy.where (a == 0))' verwenden. –

+1

@ IgnacioVazquez-Abrams Ist das hier wichtig? Ich bin mir nicht sicher, aber ich denke, er druckt immer die ganzen "Boxen" ... also denke ich, dass es auch 3 Nullen geben könnte, aber es würde immer noch funktionieren. – evotopid

Antwort

3

Sie könnten verwenden, um eine Liste Verständnis:

[(i, j) for i in range(3) for j in range(3) if board[i][j] == 0] 

Dies umfasst mehrere Nullen pro Zeile, falls vorhanden.

4

Ihre Frage ist sehr vage (was über mehrere Nullen in einem der inneren Listen), Kommentar fühlen Sie sich frei, wenn Sie nach etwas suchen, sonst:

zeroes = [] 
for x, box in enumerate(board): 
    if 0 in box: 
     zeroes.append((x, box.index(0))) 
print zeroes 

Mit Ihren gegebenen Listen, diese drucken

[(0, 2), (2, 2)] 

Eine kürzere, pythonic Version wie diese mit einer Liste Verständnis würde:

zeroes = [(x, box.index(0)) for x, box in enumerate(board) if 0 in box] 
+0

Ich wusste nicht über die Enumerate-Funktion, die sich als nützlich erweisen wird. Gibt es eine Möglichkeit, die for if-Schleife in eine Zeile zu komprimieren? – GeneralZero

+1

@GeneralZero: Dies kann in einer Zeile als 'Nullen = [(x, box.index (0)) für x, Box in enumerate (box) wenn 0 in Box]' geschrieben werden. Beachten Sie, dass dieser Code (wie auch der Code in der obigen Antwort) höchstens eine Null pro Zeile enthält - nicht sicher, ob dies der gewünschte Wert ist. –

+0

@SvenMarnach Vielen Dank, dass Sie darauf hingewiesen haben. Ich brauche tatsächlich mehr als einen pro Reihe – GeneralZero

Verwandte Themen