在Python图中添加边(初学者)

时间:2013-02-22 21:05:44

标签: python graph

在以下图表实现中,v, w = e分配的作用是什么以及它如何工作?我以为我们不允许这样做不对称的作业。

class Graph(dict):
    def __init__(self, vs=[], es=[]):
        """create a new graph.  (vs) is a list of vertices;
        (es) is a list of edges."""
        for v in vs:
            self.add_vertex(v)

        for e in es:
            self.add_edge(e)

    def add_vertex(self, v):
        """add (v) to the graph"""
        self[v] = {}

    def add_edge(self, e):
        """add (e) 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

2 个答案:

答案 0 :(得分:3)

它的工作方式是这样的: e实际上是一个元组,由两个元素组成。说明v, w = e等于将e的第一个元素分配给v,将第二个元素分配给w。

作为演示,请检查以下python控制台输出:

>>> e = (1, 2)
>>> u, v = e
>>> u
1 
>>> v
2

希望能在某种程度上清除它。

答案 1 :(得分:0)

这是因为艾伦·唐尼(book)想要在他的书的下一页给你打开包装。

他写道:

class Edge(tuple):
    def __new__(cls, *vs):
        return tuple.__new__(cls, vs)

    def __repr__(self):
        return 'Edge(%s, %s)' % (repr(self[0]), repr(self[1]))

    __str__ = __repr__

...所以它变得明确它是一个元组。