2013-02-13 146 views
0

我有一个简单的图,并且想要创建一个方法“get_edge”,它将采用两个顶点作为参数,并在它们之间返回边缘(如果存在),否则返回无。这是我尝试过的一个片段。它不起作用,因为它目前创建一个对象,而不是检查是否已经存在一个对象。写get_edge()的最简单方法是什么?如何检查Python中图的两个顶点之间是否存在边?

def add_edge(self, e): 
    """Adds and edge to the graph by adding an entry in both directions. 

    If there is already an edge connecting these Vertices, the 
    new edge replaces it. 
    """ 
    v, w = e 
    self[v][w] = e 
    self[w][v] = e 

def get_edge(self, v1, v2): 
    try: 
     Edge(v1, v2) 
     print 'Edge exists' 
    except: 
     print 'Edge does not exist' 
     return None 
+1

这感觉有点困惑。 get_edge试图处理一个Edge对象,但add_edge不会创建一个 - 它只是设置self [v] [w]和self [w] [v]。哪一个是正确的表示? – rkday 2013-02-14 00:01:13

回答

1

我怀疑你想要的东西,如:

def get_edge(self, v1, v2): 
    try: 
     e = self[v1][v2] # order shouldn't matter 
     print("edge exists") 
     return e 
    except KeyError: 
     print("edge does not exist") 
     return None 

我假设你的类是从dict衍生或具有__getitem__方法可行,会提高一个KeyError如果你问对于不存在的密钥。如果您不需要print语句(即,它们仅用于调试),则可以取消e变量并直接返回结果。

相关问题