迭代地删除Python中的列表元素 - 列表理解与for循环,不同的结果

时间:2016-04-11 12:48:30

标签: python-2.7

给出超图的边集(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]]

0 个答案:

没有答案