在 python 中删除路由器功能
Remove router function in python
你好只是想知道是否有人能告诉我为什么这段代码不起作用
它给出了一个内部服务器错误
谢谢
@app.post("/removerouter/")
def removerouter(name: str):
Graph.remove_node(name)
return "success"
这是Graph里面的函数
class Graph:
def __init__(self):
self.nodes = []
self.edges = []
def remove_node(self, name):
self.nodes.remove(name)
for Edges in self.edges:
if name in Edges:
self.edges.remove(Edges)
根据您发布的代码,我会说这个问题与您如何在 for
循环中删除边缘有关。
当您使用 Python 中的 remove()
函数删除列表元素时,它会更改剩余元素的索引。
有关更多详细信息和替代方案,请参阅此 SO question.
我也不明白您为什么要在 for 循环中使用名为 Edges
的迭代器变量。 Python 变量应始终以小写字母开头,以免与任何现有(或未来)class 名称冲突。
我宁愿做这样的事情:
class Graph:
def __init__(self):
self.nodes = []
self.edges = []
def remove_node(self, name):
self.nodes.remove(name)
self.edges = [edge for edge in self.edges if name not in edge]
请注意,我在这里使用列表推导式将新列表分配给 self.edges
。
如果你想避免列表理解,你也可以保留你的 for
循环并首先存储需要删除的边的索引。然后,对于每个索引,您可以简单地执行 del self.edges[index]
.
你好只是想知道是否有人能告诉我为什么这段代码不起作用 它给出了一个内部服务器错误 谢谢
@app.post("/removerouter/")
def removerouter(name: str):
Graph.remove_node(name)
return "success"
这是Graph里面的函数
class Graph:
def __init__(self):
self.nodes = []
self.edges = []
def remove_node(self, name):
self.nodes.remove(name)
for Edges in self.edges:
if name in Edges:
self.edges.remove(Edges)
根据您发布的代码,我会说这个问题与您如何在 for
循环中删除边缘有关。
当您使用 Python 中的 remove()
函数删除列表元素时,它会更改剩余元素的索引。
有关更多详细信息和替代方案,请参阅此 SO question.
我也不明白您为什么要在 for 循环中使用名为 Edges
的迭代器变量。 Python 变量应始终以小写字母开头,以免与任何现有(或未来)class 名称冲突。
我宁愿做这样的事情:
class Graph:
def __init__(self):
self.nodes = []
self.edges = []
def remove_node(self, name):
self.nodes.remove(name)
self.edges = [edge for edge in self.edges if name not in edge]
请注意,我在这里使用列表推导式将新列表分配给 self.edges
。
如果你想避免列表理解,你也可以保留你的 for
循环并首先存储需要删除的边的索引。然后,对于每个索引,您可以简单地执行 del self.edges[index]
.