扫描python中的列表列表,查找元素上的特定字符



我在python中找到访问特定列表的方法时遇到了一个问题。

情况如下:

我有一个list的list,像这样有一些1和一些0:

matrix = 
[
[0,0,0,0,0,0,0],
[0,1,1,1,1,0,1],
[0,1,1,1,1,0,1],
[0,1,1,1,1,0,1],
[0,0,0,0,0,0,0],
]

所以我在列表的列表中输入一个特定的坐标像这样

y = 3
x = 3

和从这个位置,我需要标记(例如2)所有的坐标附近的开始位置,其中1是在框中。当我用2标记了所有起始点附近的位置时,停止。

这是预期的结果:

expected_matrix = 
[
[0,0,0,0,0,0,0],
[0,2,2,2,2,0,1],
[0,2,2,2,2,0,1],
[0,2,2,2,2,0,1],
[0,0,0,0,0,0,1],
]

编辑:我不能扫描所有的列表,因为我不想标记每一个1,而只标记最接近的(在起始点坐标(行和cols)内的0旁边)的起始点

谢谢。

由于你的描述不清楚,所以我在这里做一些假设:

  1. 给定x, y为起始坐标
  2. 移动方向为右,则向下
  3. 沿着path标记所有的1变成2。基于这些假设,问题可以这样解决:
matrix =[
[0,0,0,0,0,0],
[0,1,1,1,1,0],
[0,1,1,1,1,0], #     ???
[0,1,1,1,1,1], # <- 3, 3?
[0,0,0,0,1,1],
]
R = len(matrix)    # 5
C = len(matrix[0]) # 6

start_r, start_c = 3, 3
for i in range(start_r, R):
for j in range(start_c, C):
#print(i, j, matrix[i][j])   #can comment out
matrix[i][j] = 2    # mark it to 2
print(matrix)

好了,我终于找到解决办法了。

#upside
for yy in range(y,-1,-1):
if matrix[yy][x] == 0:
break
for xx in range(x,-1,-1):
if matrix[yy][xx] == 0:
break
matrix[yy][xx] = 2
for xx in range(x+1, len(matrix[y])):
if matrix[yy][xx] == 0:
break
matrix[yy][xx] = 2
#downside
for yy in range(y, len(matrix)):
if matrix[yy][x] == 0:
break
for xx in range(x,-1,-1):
if matrix[yy][xx] == 0:
break
matrix[yy][xx] = 2  
for xx in range(x+1, len(matrix[y])):
if matrix[yy][xx] == 0:
break
matrix[yy][xx] = 2

可能是一个递归的解决方案,但无论如何,这可以帮助我!

最新更新