我有一個雙列表,我想知道是什麼,以獲得零的索引陣列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]
我有一個雙列表,我想知道是什麼,以獲得零的索引陣列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]
你可以使用列表理解:
[(i, j) for i in range(3) for j in range(3) if board[i][j] == 0]
這將包括每行多個零(如果存在)。
你的問題很模糊(怎麼樣在內部列表中的一個多零),隨時如果你正在尋找其他的東西發表評論:
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]
我不知道枚舉函數會非常方便地派上用場。 有沒有辦法將for if循環壓縮到一行? – GeneralZero 2012-03-28 20:02:24
@GeneralZero:這可以在一行中寫成:對於x,zeroes = [(x,box.index(0)),如果在box中爲0,則枚舉(box)中的box。請注意,此代碼(以及上述答案中的代碼)至多包含每行一個零 - 不知道這是否是您想要的。 – 2012-03-28 20:30:57
@SvenMarnach謝謝你指出。實際上我確實需要每行多於一個 – GeneralZero 2012-03-28 21:19:09
如果子列表中有多個0,該怎麼辦? – 2012-03-28 19:43:10
如果'board'是一個NumPy數組,你可以使用'zip(* numpy.where(a == 0))''。 – 2012-03-28 19:43:30
@ IgnacioVazquez-Abrams這裏有這個問題嗎?我不確定,但我認爲他總是打印整個盒子......所以我認爲也可以有3個零,但它仍然可以工作。 – evotopid 2012-03-28 19:45:57