给出超图的边集(python中的列表列表)(例如l = [[1,2,3],[2],[3],[3,4]]),任务是删除包含特定顶点的所有边(例如顶点2)。 对于上面的例子,结果应该是[[3],[3,4]]。
我很难理解为什么第一个函数不能按预期工作。
def edge_delete(edge_set, v0):
""" delete all edges containing vertex v0 """
for edge in edge_set:
if v0 in edge:
edge_set.remove(edge)
return edge_set
给出
l = [[1,2,3], [2], [3], [3,4]]
edge_delte(l, 2)
[[2], [3], [3, 4]]
我不清楚为什么元素[1,2,3]被删除,而不是元素[2]。
以下给出了正确的结果
def edge_delete_v2(edge_set, v0):
""" delete all edges containing vertex v0 """
return [edge for edge in edge_set if v0 not in edge]
给出
l = [[1,2,3], [2], [3], [3,4]]
edge_delete_v2(l, 2)
[[3], [3, 4]]