我有以下任务,我需要一些帮助。假设您具有以下矩阵:
[['R', 'R', 'R', 'G'],
['G', 'B', 'R', 'G'],
['R', 'G', 'G', 'G'],
['G', 'G', 'B', 'B']]
我的代码:
# Open the unit test in read mode.
file_handle = open('test_3', 'r')
# Create a list of lines.
lines_list = file_handle.readlines()
# Find the matrix dimensions. Cast values to integers from strings.
cols, rows = (int(val) for val in lines_list[0].split())
# Do a double-nested list comprehension to get the rest of the data. Slice to exclude dimensions.
matrix = [[val for val in line.split()] for line in lines_list[1:]]
counter = 0
for i in range(len(matrix) - 1):
for j in range(len(matrix[i]) - 1):
if matrix[i][j] == matrix[i][j + 1]:
counter += 1
print(counter)
我需要遍历行和列,并计算相同字符串的最长序列(不包括对角线)。因此,在此测试用例中,如果我们遵循从第1行到底部的G,则序列的总数为7。
我的想法是使用嵌套的for循环遍历矩阵,检查每个子数组中的下一个项目是否与上一个相同,并相应地增加一个计数器变量。
如何同时对矩阵的列执行此操作?
请记住,我正在寻找对菜鸟友好的解决方案。
谢谢。
答案 0 :(得分:0)
for i in range(len(matrix) - 1):
for j in range(len(matrix[i]) - 1):
您遇到了解析cols
,rows
的麻烦-最好将它们用作循环边界。
if matrix[i][j] == matrix[i][j + 1]:
是的,这只处理一个方向。 考虑定义一个neighborhood:
nbrhd = [
(0, 1),
(-1, 0),
(0, -1),
(1, 0),
]
然后您可以迭代dx, dy
,
将这些增量添加到当前位置。
考虑使用numpy array而不是列表列表,
因此您的i
,j
索引不会倒退。
您需要解决的主要问题是选择一种算法, 写下所需方法的说明, 并开始实施。
例如,也许您希望将其视为“算面包屑” 锻炼身体,捡起它们以避免陷入循环中。 或者,您可能更希望生成一个价值图, 显示访问每个广场多少钱值得 从某个起点开始。
简而言之,您遇到了不知道如何解决的复杂问题, 并且您需要写下一个或多个您可以解决的“简单”子问题 以及距离目标更近几英寸。