2012-03-28 134 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