1

頂点の番号が 0..n-1 のグラフを読みたい。次のコードを試しました:

myfile = open('test.in', 'r')
n = int(myfile.readline())
graph = [[]]*n
for line in myfile:
    u, v, w = map(int, line.strip().split(' '))
    graph[u].append((v, w))
print graph

しかし、うまくいきません。graphのすべての要素が同じであることがわかりました。次に、次のコードを使用して修正します。

road = [[] for i in xrange(n)]

それは機能しますが、それほどきれいではありません。

この状況に対するより良い解決策があるかどうか、および最初のコードですべての要素が同じである理由を知りたいですか?

4

1 に答える 1

2

あなたが使用することができます

from collections import defaultdict
graph = defaultdict(list)

graph = [[]]*n機能しない理由は、単一の空のリストを作成してから、その同じリストを多数参照しているためです。

于 2012-09-23T03:16:47.867 に答える