Python 二维列表值检查
Python 2d list value check
以下脚本在 python 中生成二维列表:
matrix = [[0 for row in range (5)] for col in range (5)]
i = 2
matrix[i][i] = 1
matrix[i+1][i] = 1
matrix[i][i+1] = 1
matrix[i+1][i+1] = 1
for row in matrix:
for item in row:
print(item,end=" ")
print()
print()
生成的二维列表如下所示:
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 1 1 0
0 0 0 0 0
我怎样才能找到是否有与显示的数字相同(数字必须为1)的正方形?相同数字的正方形必须是2x2
您可以遍历线条和单元格,对于每个左上角,检查单元格的正方形是否都等于 1,return 如果是,则为真:
def has_square(seq):
for row, line in enumerate(seq[:-1]):
for col, cell in enumerate(line[:-1]):
if cell == 1:
if seq[row][col+1] == 1 and seq[row+1][col] == 1 and seq[row+1][col+1] == 1:
return True
return False
有正方形 == 真:
seq = [[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 1],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 0]]
has_square(seq)
有正方形 == 错误:
seq = [[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]]
has_square(seq)
它相当粗糙,不能很好地概括,但可以做你想做的事情:确定一个序列的序列是否有四个 1 的平方。
我们可以遍历矩阵中的每个元素,直到找到 1。如果我们遇到 1,那么我们可以检查它的相邻元素是否包含 1,因为如果我们没有遇到 1,那么它正在形成的矩阵是邻居不在我们的兴趣范围内。
这是执行此操作的代码:
def check_matrix(i,j):
if matrix[i][i+1] ==1 and matrix[i+1][j]==1 and matrix[i+1][j+1]==1:
return True
else:
return False
for i in range(5):
for j in range(5):
if matrix[i][j] == 1:
check = check_matrix(i,j)
if check == True:
print('found at index',i,j)
该程序将检查矩阵中的 1,如果遇到 1,则检查其相邻元素是否为 1,如果所有元素均为 1,则它将 return True,否则它将 return False .
让它易于定制怎么样?
width = 5 # Width of grid
height = 5
square_w = 2 # Width of square you want found
square_h = 2
square_coords = []
avoid = [0] # This number doesn't count as a square
grid_list = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 1, 0,
0, 0, 1, 1, 0,
0, 0, 0, 0, 0] # Grid
# ONLY EDIT ABOVE /\ /\ /\
conv_list = []
for rep_h in range(height): # Convert grid
conv_list += [[0] * width]
for rep_w in range(width):
conv_list[rep_h][rep_w] = grid_list[rep_h*width+rep_w]
for rep_h in range(height-square_h+1): # Find squares
for rep_w in range(width-square_w+1):
square_vis = True
if not conv_list[rep_h][rep_w] in avoid:
square_val = conv_list[rep_h][rep_w]
for h in range(square_h):
for w in range(square_w):
if conv_list[rep_h+h][rep_w+w] != square_val:
square_vis = False
if square_vis:
square_coords += [[rep_h, rep_w]]
print(square_coords) # Print result (Starting coordinates, AKA top left of box found)
以下脚本在 python 中生成二维列表:
matrix = [[0 for row in range (5)] for col in range (5)]
i = 2
matrix[i][i] = 1
matrix[i+1][i] = 1
matrix[i][i+1] = 1
matrix[i+1][i+1] = 1
for row in matrix:
for item in row:
print(item,end=" ")
print()
print()
生成的二维列表如下所示:
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 1 1 0
0 0 0 0 0
我怎样才能找到是否有与显示的数字相同(数字必须为1)的正方形?相同数字的正方形必须是2x2
您可以遍历线条和单元格,对于每个左上角,检查单元格的正方形是否都等于 1,return 如果是,则为真:
def has_square(seq):
for row, line in enumerate(seq[:-1]):
for col, cell in enumerate(line[:-1]):
if cell == 1:
if seq[row][col+1] == 1 and seq[row+1][col] == 1 and seq[row+1][col+1] == 1:
return True
return False
有正方形 == 真:
seq = [[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 1],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 0]]
has_square(seq)
有正方形 == 错误:
seq = [[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]]
has_square(seq)
它相当粗糙,不能很好地概括,但可以做你想做的事情:确定一个序列的序列是否有四个 1 的平方。
我们可以遍历矩阵中的每个元素,直到找到 1。如果我们遇到 1,那么我们可以检查它的相邻元素是否包含 1,因为如果我们没有遇到 1,那么它正在形成的矩阵是邻居不在我们的兴趣范围内。
这是执行此操作的代码:
def check_matrix(i,j):
if matrix[i][i+1] ==1 and matrix[i+1][j]==1 and matrix[i+1][j+1]==1:
return True
else:
return False
for i in range(5):
for j in range(5):
if matrix[i][j] == 1:
check = check_matrix(i,j)
if check == True:
print('found at index',i,j)
该程序将检查矩阵中的 1,如果遇到 1,则检查其相邻元素是否为 1,如果所有元素均为 1,则它将 return True,否则它将 return False .
让它易于定制怎么样?
width = 5 # Width of grid
height = 5
square_w = 2 # Width of square you want found
square_h = 2
square_coords = []
avoid = [0] # This number doesn't count as a square
grid_list = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 1, 0,
0, 0, 1, 1, 0,
0, 0, 0, 0, 0] # Grid
# ONLY EDIT ABOVE /\ /\ /\
conv_list = []
for rep_h in range(height): # Convert grid
conv_list += [[0] * width]
for rep_w in range(width):
conv_list[rep_h][rep_w] = grid_list[rep_h*width+rep_w]
for rep_h in range(height-square_h+1): # Find squares
for rep_w in range(width-square_w+1):
square_vis = True
if not conv_list[rep_h][rep_w] in avoid:
square_val = conv_list[rep_h][rep_w]
for h in range(square_h):
for w in range(square_w):
if conv_list[rep_h+h][rep_w+w] != square_val:
square_vis = False
if square_vis:
square_coords += [[rep_h, rep_w]]
print(square_coords) # Print result (Starting coordinates, AKA top left of box found)