Python-如何查找多维数组中是否存在项目?

时间:2018-07-16 20:33:58

标签: python arrays python-3.x list

我尝试了几种方法,但似乎没有一种对我有用。

board = [[0,0,0,0],[0,0,0,0]]

if not 0 in board:
     # the board is "full"

然后我尝试:

if not 0 in board[0] or not 0 in board[1]:
    # the board is "full"

尽管第二种方法通常可以使数组填充得更多,但是这些方法均无效。 (我编写了代码以随机填充数组。)

4 个答案:

答案 0 :(得分:2)

我将尝试解决您做错的事情:

if not 0 in board[0] or not 0 in board[1]:几乎是正确的-但您应该使用and,因为要被认为已满,两个板不能同时具有0。

一些选项:

if not 0 in board[0] and not 0 in board[1]: # would work

if 0 not in board[0] and 0 not in board[1]: # more idiomatic

if not(0 in board[0] or 0 in board[1]): # put "not" in evidence, reverse logic

if not any(0 in b for b in board): # any number of boards

答案 1 :(得分:0)

再次尝试使用chain中的itertools(这样可用于多行):

from itertools import chain

board = [[0,0,0,0],[0,0,0,0]]

def find_in_2d_array(arr, value):
    return value in chain.from_iterable(arr)

print(find_in_2d_array(board, 0))
print(find_in_2d_array(board, 1))

打印:

True
False

答案 2 :(得分:0)

您需要遍历列表的所有索引,以查看元素是否为嵌套列表之一中的值。您可以简单地遍历内部列表并检查元素是否存在,例如:

if not any(0 in x for x in board):
    pass  # the board is full

使用any()会在遇到包含0的元素时起到短暂的作用,因此您不需要遍历其余元素。

答案 3 :(得分:0)

如果您可以使用标准库numpy之外的工具,则是长期使用多维数组的最佳方法。

board = [[0,0,0,0],[0,0,0,0]]
board = np.array(board)
print(0 in board)

输出:

True