首页 > 解决方案 > 在网格中查找模式

问题描述

我正在尝试在 python 中构建一个程序,该程序在矩阵中找到给定的模式并计算该模式出现的次数。

    pattern = [[1,0,1],
              [0,0,0],
              [1,0,1]]

    grid = [[0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,1,0,1,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,1,0,1,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0]]

我试过这个,但它不起作用:

    def find_pattern(grid,pattern):
        for x in range(len(grid)):
            for y in range (len(grid[0])):
                x0 = (x//3)*3
                y0 = (y//3)*3

                for i in range(len(pattern)):
                    for j in range(len(pattern[0])):
                        if grid[x0 + i][y0 + j] != patter[i][j]:
                            return False

return True

标签: pythonmatrix

解决方案


这对我有用:

def find_pattern(grid, pattern):
    count = 0
    for x in range(len(grid[0])-len(pattern[0])+1):
        for y in range(len(grid)-len(pattern)+1):
            local = grid[y:y+len(pattern)]
            local = [e[x:x+len(pattern[0])] for e in local]
            if local == pattern:
                count += 1
    return count

基本上它会遍历所有与grid一样大的部分pattern,然后count为每个与 相同的部分添加一个pattern

例子:

pattern = [[0,1],
           [1,0]]
grid = [[1,0,1,0,1],
        [0,1,0,1,0]]

print(find_pattern(grid, pattern))

输出2


推荐阅读