2012-09-23 27 views
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 

但它不能正常工作。我發現中的所有元素都是一樣的!然後我使用下面的代碼來修復它:

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

它確實有效,但看起來不那麼漂亮。

我想知道是否有更好的解決這種情況爲什麼所有的元素都在第一代碼一樣嗎?

回答

2

你可以使用

from collections import defaultdict 
graph = defaultdict(list) 

graph = [[]]*n不工作的原因是,你正在創建一個空白列表,然後進行多次提到相同的列表

+0

非常感謝。我之前使用過'defaultdict',但是我猜這個列表比dict快一點,因爲頂點的編號是0..n-1。我對嗎? – abcdabcd987

+2

@ abcdabcd987,「快」和「漂亮」不是正交的。通常你必須交換一個或找到一個妥協 –