0

我有一个包含一个整数的类,另一个列表包含数据。

class Vertex:
    def __init__(self, ID = str()):
        self.id = ID
        self.neighbors = AdjacencyList()

邻接表是另一类。其中包含一个列表。

我会用一条打印语句打印邻居中的 id 和列表。怎么可能?

这是我现在使用的代码(使用字符串连接)

def printGraph(g = Graph()):
    msg = str('')
    for k, v in g.nodes.iteritems():
        root_node = g.nodes[k]
        msg = "(" + k + " , " + str(root_node.color) + ") : "

        for x in v.neighbors.innerlist:
            msg += str(x.id) + " , "
        print msg

您可以看到我在 print 方法中使用的整个字符串分隔符。

4

4 回答 4

2

您可以使用str.format()函数来格式化输出:-

print "Id: {0}, Neighbour: {1}".format(self.id, self.neighbours)

这将在Python 2.6+. 对于旧版本,您可能需要使用@Daniel 答案中的那个。

From Python 2.7,您也可以省略该位置参数并仅使用{}:-

print "Id: {}, Neighbour: {}".format(self.id, self.neighbours)
于 2012-10-27T10:49:44.377 回答
2

您还可以使用字符串格式:

print('id: %s, neigbors: %s' % (self.id, str(self.neighbors)))
于 2012-10-27T10:50:09.993 回答
1

我认为您的代码可以重写如下:

def printGraph(g = Graph()):
    for k, v in g.nodes.iteritems():
        msg = "({0} , {1}) : {2}".format(k, v.color, ", ".join(["{0}".format(x.id) for x in v.neighbors.innerlist]))
        print msg

如您所见,一步构建整个字符串的诀窍是用列表推导替换最后一个for循环,列表推导就地转换为字符串并包含在初始字符串中。这样,您可以单独打印列表项,而不是打印列表对象,这样您就可以:

  • 为项目提供所需的输出格式
  • 打印项目属性
于 2012-10-27T11:01:12.193 回答
1

我没有测试它 - 它有点不可读,但在一行中它应该类似于

print '\n'.join(('({},{}):{}'.format(key, node.color,
                                     ','.join('{}'.format(x) for x in node.neighbors.innerlist)) 
                for key, node in g.nodes.iteritems())
于 2012-10-27T13:42:13.220 回答