2012-03-28 101 views
0

我有一個雙列表,我想知道是什麼,以獲得零的索引陣列Python列表索引

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

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

這樣,而是我希望有回報 [0的最佳途徑, 2] [2,2]

+1

如果子列表中有多個0,該怎麼辦? – 2012-03-28 19:43:10

+5

如果'board'是一個NumPy數組,你可以使用'zip(* numpy.where(a == 0))''。 – 2012-03-28 19:43:30

+1

@ IgnacioVazquez-Abrams這裏有這個問題嗎?我不確定,但我認爲他總是打印整個盒子......所以我認爲也可以有3個零,但它仍然可以工作。 – evotopid 2012-03-28 19:45:57

回答

3

你可以使用列表理解:

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

這將包括每行多個零(如果存在)。

4

你的問題很模糊(怎麼樣在內部列表中的一個多零),隨時如果你正在尋找其他的東西發表評論:

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

有了您給出列表,這個打印

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

更短,更Python版本將使用列表理解是這樣的:

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

我不知道枚舉函數會非常方便地派上用場。 有沒有辦法將for if循環壓縮到一行? – GeneralZero 2012-03-28 20:02:24

+1

@GeneralZero:這可以在一行中寫成:對於x,zeroes = [(x,box.index(0)),如果在box中爲0,則枚舉(box)中的box。請注意,此代碼(以及上述答案中的代碼)至多包含每行一個零 - 不知道這是否是您想要的。 – 2012-03-28 20:30:57

+0

@SvenMarnach謝謝你指出。實際上我確實需要每行多於一個 – GeneralZero 2012-03-28 21:19:09