收到KeyError:'0_0'表示我的python程序

时间:2016-09-16 03:49:30

标签: python algorithm python-2.7 data-structures

我正在研究这个问题(来自Leetcode):

  

“给定整数矩阵,找到最长的增长长度   路径。

     

从每个单元格,您可以移动到四个方向:左,右,上或下。   你可能不会对角移动或移动到外面   边界(即不允许环绕)。

Example 1:

nums = [
  [9,9,4],
  [6,6,8],
  [2,1,1]
]
Return 4.

我一直在遇到KeyError:

Traceback (most recent call last):
  File "/Users/Desktop/longest_increasing_path_in_a_matrix.py", line 41, in <module>
    print(test.longestIncreasingPath(matrix))
  File "/Users/Desktop/longest_increasing_path_in_a_matrix.py", line 31, in longestIncreasingPath
    traverse(x, y, [])
  File "/Users/Desktop/longest_increasing_path_in_a_matrix.py", line 5, in traverse
    if traverse.traveled[str(x_coor) + "_" + str(y_coor)]:
KeyError: '0_0'

而且我不确定我做错了什么。我明白这与我的字典有关。如果我还需要发布任何其他内容,请告知我们:

class Solution(object):
def longestIncreasingPath(self, matrix):

    def traverse(x_coor, y_coor, build):
        key = str(x_coor) + "_" + str(y_coor)
        if key in traverse.traveled and traverse.traveled[key]:
            if traveled[str(x_coor) + "_" + str(y_coor)]:
                return
            elif x_coor < 0 or y_coor < 0 or x_coor >= len(matrix[0]) or y_coor >= len(matrix)-1:
                return
            elif len(build) > 0 and matrix[x_coor][y_coor] <= build[-1]:
                if len(build) > traverse.count:
                    traverse.count = len(build)
                return 

            traveled[str(x_coor) + "_" + str(y_coor)] = true
            build.append(matrix[y_coor][x_coor])
            traverse(x_coor, y_coor-1, build)
            traverse(x_coor, y_coor+1, build)
            traverse(x_coor+1, y_coor, build)
            traverse(x_coor-1, y_coor, build)
            build.pop()
            del traveled[str(x_coor) + "_" + str(y_coor)]

        traverse.count = 0
        traverse.traveled = {}


        for y in range(0, len(matrix)-1, 1):
            for x in range(0, len(matrix[0]), 1):
                traverse(x, y, [])

        return(traverse.count)
matrix = [
    [9,9,4],
    [6,6,8],
    [2,1,1]
]
test = Solution()
print(test.longestIncreasingPath(matrix))

1 个答案:

答案 0 :(得分:1)

您正在尝试访问字典中尚不存在的密钥(0_0)。

您必须事先检查是否存在,我建议使用in关键字:

key = str(x_coor) + "_" + str(y_coor)
if key in traverse.traveled and traverse.traveled[key]:
    # ...