python - 在网格中查找模式
问题描述
我正在尝试在 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
解决方案
这对我有用:
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
推荐阅读
- javascript - $.getJSON 在 for 循环中没有 let 语句以实现浏览器兼容性
- acl - Syslog 用户能够通过 ACL 读取文件,但 rsyslog 进程不是
- mysql - 在ubuntu中安装xampp后首次打开phpmyadmin时phpmyadmin没有连接
- c# - 方法阻塞 UI 线程
- c# - 修改文件权限 .NET 适用于 Windows 10,但不适用于 Server 2008
- php - php simplexml 在两个 xml 文档之间查找/替换
- sql - 基于当天的查询条件(周六/周日应该返回周五的值)
- html - 如何编写一个仅在屏幕垂直翻转时出现在移动设备上并在水平翻转时消失的弹出文本框?
- vb.net - 索引超出数组 VB 2015 的范围
- javascript - 最接近(elem)没有按预期返回 - 返回 init[elem..] 而不是 elem