0

整数を保持するクラスがあり、別のリストがデータを保持しています。

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

隣接リストは別のクラスです。リストを保持します。

単一の print ステートメントを使用して、近隣の 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 の回答にあるものを使用する必要がある場合があります。

から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

ご覧のとおり、文字列全体を 1 つのステップで作成するための秘訣は、最後のforループをリスト内包表記に置き換えることです。リスト内包表記は、その場で文字列に変換され、最初の文字列に含まれます。このようにして、リスト オブジェクトを印刷する代わりにリスト アイテムを個別に印刷するので、次のことが可能になります。

  • アイテムに希望の出力形式を与える
  • 印刷アイテムの属性
于 2012-10-27T11:01:12.193 に答える
1

私はそれをテストしませんでした-そしてそれは一種の判読不能ですが、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 に答える