Class 方法 returns None
Class method returns None
我对 Bellman-Ford 做了一些修改以获得一些我需要比较的数据,但我似乎无法从 return 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]]
正确
None
打印:好的
列表 A = 列表 B
为什么return None???我错过了什么?
None
来自:
print(g.BellmanFord(0))
BellmanFord
在任何情况下都不会 returns 任何有用的东西(它要么掉到最后并隐式地 returns None
,要么执行一个普通的 return
,也就是 return None
)。删除调用周围的 print()
,您将避免 None
输出。
或者,将 self.printArr(dist, src)
更改为 return self.printArr(dist, src)
,这样它 可以 return 一些有用的东西(假设早期 return
,可能应该引发异常而不是静默 returning None
,不被调用)。
我对 Bellman-Ford 做了一些修改以获得一些我需要比较的数据,但我似乎无法从 return 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]]
正确
None
打印:好的
列表 A = 列表 B
为什么return None???我错过了什么?
None
来自:
print(g.BellmanFord(0))
BellmanFord
在任何情况下都不会 returns 任何有用的东西(它要么掉到最后并隐式地 returns None
,要么执行一个普通的 return
,也就是 return None
)。删除调用周围的 print()
,您将避免 None
输出。
或者,将 self.printArr(dist, src)
更改为 return self.printArr(dist, src)
,这样它 可以 return 一些有用的东西(假设早期 return
,可能应该引发异常而不是静默 returning None
,不被调用)。