2014-07-02 38 views
0

我正在嘗試使用大小爲nxn的列表打印一種2d數組。我遇到的問題是該列表成爲最終的一組隨機數。使用包含隨機數的其他列表填充列表問題。

例如,如果第一組數字是[1,5,7],那麼metaList將變成[[1,5,7],1,2]。但是,如果第二組數字是[3,4,5],那麼元列表將變爲[[3,4,5],[3,4,5],2]最終列表是三個相同的列表,但我希望他們有所不同。

對不起,如果這是簡單的事情。預先感謝您提供的任何幫助。這是代碼。

import random 
n = 3 

def aBuilder(): 
    metaList = range(n) 
    tempList = range(n) 
    for x in range(n): 
     metaList[x] = tempList 
     print metaList 
     for y in range (n): 
      tempList[y] = random.randint(1,9) 
      print tempList[y] 
    return metaList 

def printList(List): 
    for x in range(n): 
     print List[x] 

printList(aBuilder()) 
+0

因爲您填寫'metaList'具有相同的列表對象** **引用,並修改它。 – jonrsharpe

+0

@jonrsharpe我正要回答問題所在,並給出一個更簡單的功能。我不完全明白爲什麼這是涉及字典的問題的重複? – timgeb

+0

@timgeb我已重新打開,但問題是相同的 - 填寫一個可變容器引用列表 – jonrsharpe

回答

3

的問題是,metaList只持有引用tempList,所以當tempList變化,所以會在metaList的項目。解決的辦法是行

​​

改變

metaList[x] = tempList[:] 

,以使每個tempList分配的副本。 你的問題的一個簡單的解決方案可能是這樣的:

import random 
def randlists(n, start, to): 
    return [[random.randint(start,to) for i in range(n)] for i in range(n)] 

print(randlists(3,1,9))