在二维数组中查找特定值

时间:2020-06-26 15:47:54

标签: python arrays loops

我需要一些帮助来编辑我的代码,以便使用布尔值给我一个输出。是非题。

我有一个编写的代码,该代码搜索2d数组以查找> = 32的任何值。 但是目前,它循环遍历并给出每个值的答案。我只是在寻找单个输出,如果值等于或大于32,则为true。如果找不到这样的值,则为false。

我的代码是

grid = [[2, 0, 2, 0],
        [0, 4, 0, 8],
        [0, 16, 0, 128],
        [2, 2, 2, 2]]
a = np.array(grid)
for row in grid:
    for c in row:
        if c >= 32:
            print(True)
        else:
            print(False)   

8 个答案:

答案 0 :(得分:2)

查看是否有大于32的值:

(np.array(grid) > 32).any()
True

要获取索引:

np.where(np.array(grid) > 32)
(array([2], dtype=int64), array([3], dtype=int64))

答案 1 :(得分:1)

grid_array = np.array(grid)
print(np.any(grid_array >= 32))

答案 2 :(得分:1)

一种方法是在循环中设置一个true / false标志,然后在循环完成后打印该标志。

grid = [[2, 0, 2, 0],
        [0, 4, 0, 8],
        [0, 16, 0, 128],
        [2, 2, 2, 2]]
flag = False
for row in grid:
    for c in row:
        if c >= 32:
            flag = True
            break
print(flag)

答案 3 :(得分:1)

非numpy版本:

print(any([x>=32 for y in grid for x in y]))
# True

答案 4 :(得分:1)

  1. 导入Numpy:

    将numpy导入为np

  2. 声明您的数组:

    x = np.array [[2,0,2,0], [0,4,0,8], [0,16,0,128], [2,2,2,2]]

    x> 32

  3. 验证结果:

    x

答案 5 :(得分:1)

您不必在每次检查值时都打印,而是可以在循环结束时添加打印语句-

grid = [[2, 0, 2, 0],
    [0, 4, 0, 8],
    [0, 16, 0, 128],
    [2, 2, 2, 2]]
isTrue = False
for row in grid:
  for c in row:
    if c >= 32:
        isTrue = True

print(isTrue)

答案 6 :(得分:1)

不使用itertools.chain.from_iterable使用numpy的示例,因此没有嵌套循环:

from itertools import chain

grid = [[2, 0, 2, 0],
        [0, 4, 0, 8],
        [0, 16, 0, 128],
        [2, 2, 2, 2]]

print(any(x >= 32 for x in chain.from_iterable(grid)))

答案 7 :(得分:0)

那:

import numpy as np
grid = [[2, 0, 2, 0],
        [0, 4, 0, 8],
        [0, 16, 0, 128],
        [2, 2, 2, 2]]
a = np.array(grid)
ix = np.where(a>=32)

您将获得大于32的行和列。