Python-';非类型';对象不可下标错误

Python-';非类型';对象不可下标错误,python,dijkstra,Python,Dijkstra,我是Python初学者,已经面临这个问题一段时间了。任何纠正问题的建议都是有价值的。 下面是使用Dijkstra算法查找最短路径的代码。我有成本矩阵和来源作为输入 def dijkstra(cost_matrix,source): n = 20 dist = [0 for row in range(20)] visited = [0 for row in range(20)] for j in range(20): visited[j] = "Fa

我是Python初学者,已经面临这个问题一段时间了。任何纠正问题的建议都是有价值的。 下面是使用Dijkstra算法查找最短路径的代码。我有成本矩阵和来源作为输入

def dijkstra(cost_matrix,source):
    n = 20
    dist = [0 for row in range(20)]
    visited = [0 for row in range(20)]
    for j in range(20):
        visited[j] = "False"
    visited[source] = "True"
    for i in range(20):
        dist[i] = cost_matrix[source][i]
    prev_min = source
    for k in range(20):
        minimum = min(dist)
        minimum2 = min(minimum,n)
        for i in range(20):
            if dist[i] > (cost_matrix[prev_min][minimum2] + cost_matrix[minimum2][i]):
                dist[i] = cost_matrix[prev_min][minimum2] + cost_matrix[minimum2][i]
        visited[minimum2] = "True"
        prev_min = minimum2
    return dist  
计算成本矩阵的代码

def matrix():
    k = 30
    b_ij = [[0 for row in range(20)] for col in range(20)]
    a_ij = [[0 for row in range(20)] for col in range(20)]
    cost_matrix = [[0 for row in range(20)] for col in range(20)]
    for i in range(20):
        for j in range(20):
            rand = random.randint(0,8)
            b_ij[i][j] = rand
            b_ij[j][i] = rand
    while(k > 0):
        rand1 = random.randint(0,19)
        rand2 = random.randint(0,19)
        a_ij[rand1][rand2] = 200
        a_ij[rand2][rand1] = 200
        k = k - 1
    for i in range(20):
        for j in range(20):
            if a_ij[i][j] != 200:
                rand = random.randint(0,8)
                a_ij[i][j] = rand
                a_ij[j][i] = rand
    for i in range(len(a_ij)):
        for j in range(len(b_ij[0])):
            for k in range(len(b_ij)):
                cost_matrix[i][j] += a_ij[i][k] * b_ij [k][j]
错误消息:

Traceback (most recent call last):
  File "ass1.py", line 60, in <module>
    print(dijkstra(cost_matrix, 1))
  File "ass1.py", line 45, in dijkstra
    dist[i] = cost_matrix[source][i]
TypeError: 'NoneType' object is not subscriptable
回溯(最近一次呼叫最后一次):
文件“ass1.py”,第60行,在
打印(dijkstra(成本矩阵,1))
文件“ass1.py”,第45行,dijkstra
dist[i]=成本矩阵[来源][i]
TypeError:“非类型”对象不可下标

您仍然没有在创建
成本矩阵的地方发布实际代码。您发布了矩阵函数的代码,但没有发布使用矩阵函数的代码


但是,问题似乎在于
矩阵
函数没有返回任何内容。它只是创建一个矩阵并将其丢弃。您需要在该函数的末尾添加
返回成本矩阵

成本矩阵或成本矩阵[source]的值为“无”,但它应该是一个列表

在行前打印两个:

dist[i] = cost_matrix[source][i]
找出问题所在


顺便说一句,您可能应该使用numpy来处理这类内容。

发布整个错误消息,包括完整的回溯。我同意BrenBarn的建议,也请正确设置您粘贴的代码的格式,因为它可能也非常重要。不要在注释中发布它,编辑问题以包含回溯并重新格式化代码。此外,您需要包含定义成本矩阵的代码,否则我们无法判断它是如何失败的。抱歉。我犯了粗心的错误。