2015年10月31日 星期六

Python二維陣列寫法

Python實踐二維陣列的寫法注意事項

如果直覺地使用list, 可能會寫成

twoDimArray = [[0]*3]*3

陣列的樣子會是 [[0,0,0],[0,0,0], [0,0,0]]
看起來符合二維陣列的模樣, 但其中隱含一個問題
如果更改其中一個元素

twoDimArray[0][0] = 1

結果陣列內容會變成

[[1,0,0],[1,0,0],[1,0,0]]

如果使用id來看

for row in twoDimArray:
    print(id(row))

會發現id都一樣, 每一列所指的都是同一個list!!
這種bug可能會造成之後使用這個array時出現奇怪的錯誤

所以建議寫法應該改成

twoDimArray = []
    for rowCount in xrange(3)
        twoDimArray.append([0]*3)

再一次檢查id, 可以發現到已經是不同的list object了

Tip: 或者乾脆使用numpy 套件更為妥當

11/1新增:在stackflow上看到的相關討論

Reference:
http://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists

沒有留言:

張貼留言