如何从python中的列表中删除对象的实例?

时间:2016-12-28 20:04:28

标签: python

我正在使用python实现Dijkstra的算法,我想知道如何从列表中删除对象的实例? 这是我的代码的一部分,我得到一个错误:“list.remove(x):x不在列表中”。

class Vertex:
    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.minDistance = float("inf")
        self.previousVertex = None
        self.edges = []

    def computePath(self, sourceId):
        for i in self.vertexes:
            if i.id == sourceId:
                startVertex = i
                startVertex.minDistance=0
                break
            else:
                continue
        unvisited = []
        for vertex in self.vertexes:
            unvisited.append(vertex)
        while len(unvisited)!=0:
            self.visited.append(startVertex)
            unvisited.remove(startVertex)

1 个答案:

答案 0 :(得分:1)

list.remove()将从列表中删除该项目等于您要删除的内容的第一项。

换句话说,算法就是这样做:

def remove(self, item_to_remove):
    for index, item in enumerate(self):
        if item == item_to_remove:
            del self[index]
            return
    raise ValueError('list.remove(x): x not in list')

然后诀窍是使==相等测试通过。这是通过__eq__ method完成的。 默认实现仅当两个项目一个且同一个对象时才返回True,因此item is item_to_remove为真。

您可以为Vertex课程创建自定义方法:

def __eq__(self, other):
    if not isinstance(other, Vertex):
        return NotImplemented
    return self.id == other.id  # refine as needed

您需要确定两个Vertex实例何时相等。