簡體   English   中英

類方法返回無

[英]Class method returns None

我對 Bellman-Ford 進行了一些修改以獲得一些我需要比較的數據,但我似乎無法從返回 PrintArr 方法中獲得一些我需要的信息,而它打印了“dist_list” return 不會接受它,我也無法使用列表理解創建對象。

Class Graph:

def __init__(self, vertices):
    self.V = vertices
    self.graph = []

def addEdge(self, u, v, w):
    self.graph.append([u, v, w])
     
def printArr(self, dist, src):
    #print("Source  End     Distance")
    dist_list = []
    for i in range(self.V):
        #print("{0}\t{1}\t{2}".format(src, i, dist[i]))
        #print(src, i, dist[i])
        dist_list.append([src, i, dist[i]])
    print(dist_list)
    print(dist_list == [[src, i, dist[i]] for i in range(self.V)])
    return [[src, i, dist[i]] for i in range(self.V)]

 
def BellmanFord(self, src):

    dist = [float("Inf")] * self.V
    dist[src] = 0

    for _ in range(self.V - 1):
        for u, v, w in self.graph:
            if dist[u] != float("Inf") and dist[u] + w < dist[v]:
                    dist[v] = dist[u] + w

    for u, v, w in self.graph:
        if dist[u] != float("Inf") and dist[u] + w < dist[v]:
            print("Graph contains negative weight cycle")
            return
                     
    self.printArr(dist, src)


matrix = [[0, 2, 2, 2, -1], [9, 0, 2, 2, -1], [9, 3, 0, 2, -1], [9, 3, 2, 0, -1], [9, 3, 2, 2, 0]]

g = Graph(len(matrix))


[[g.addEdge(i, j, element) for j, element in enumerate(array) if i != j] for i, array in enumerate(matrix)]

print(g.BellmanFord(0))

輸出:

[[0, 0, 0], [0, 1, 2], [0, 2, 1], [0, 3, 1], [0, 4, -1]]

真的

沒有任何

打印:好的

清單 A = 清單 B

為什么返回無??? 我錯過了什么?

None來自:

print(g.BellmanFord(0))

BellmanFord在任何情況下都不會返回任何有用的東西(它要么落到最后並隱式返回None ,要么執行一個普通的return ,它也返回None )。 刪除調用周圍的print() ,您將避免None輸出。

或者,將self.printArr(dist, src)更改為return self.printArr(dist, src)以便返回一些有用的東西(假設早期的return可能會引發異常而不是靜默返回None ,沒有被調用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM