引子:今天在用python寫01揹包的演算法課作業時,發現乙個關於二維陣列的小問題,本來期末已經很忙了,但這個問題還是值得記錄下來的,因為這不是第一次遇到了,這次花了將近乙個小時才搞明白。
以如下方式初始化乙個二維陣列,在使用的過程中有沒有問題?
matrix = [[0] * n] * m
有問題!可以做個實驗:
>>> m = 3
>>> n = 4
>>> matrix = [[0] * n] * m
>>> matrix
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> matrix[1][2] = 1
>>> matrix
[[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]]
>>>
可以看出,我只修改了matrix[1][2]這乙個元素,但從結果來看,matrix這個二維陣列的每乙個一維陣列的第3個(下標為2)元素都被修改了。對此我的理解是:在申請matrix陣列時,「[0] * n」這個一維陣列可能只申請了乙個,「 * m」這操作,只是建立了m個指向「[0] * n」的引用,因此,若修改這個一維陣列中的元素,則matrix中m個一位陣列都會被修改。 更詳細解釋可以參考此篇部落格在python中定義二維陣列。
換種初始化的方式:
>>> matrix = [[0] * n for i in range(0, m)]
>>> matrix
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> matrix[1]
[2] = 1
>>> matrix
[[0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]]
>>>
可以看出,上述那種我們想要避免的情況已經不再出現了。
1.在python中定義二維陣列,woshare,,
小tips 初始化二維陣列
在做leetcode每日一題的螺旋矩陣時,有乙個很重要的一點就是對需要旋轉的角做標記。在此為初始化二維陣列這一知識點做點小筆記。分行進行初始化 int a 2 3 放在一起進行初始化 int a 2 3 進行部分初始化 int arr 2 3 此時等同於a 2 3 而int a 2 3 等同於a 2...
二維陣列的初始化
1.使用兩個for迴圈定義 for i 1 i n i 2.定義時初始化 int a n m 3.使用函式定義 memset 作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法 memset函式對陣列只能用於置零 0 或置負一 1 操作 include voi...
二維陣列的初始化
1.不分行的初始化,所有陣列元素放在一對 內 1 全部元素初始化 a 2 3 2 部分元素初始化 a 2 3 未初始化的元素預設為0,即a 1 1 0,a 1 2 0。3 省略一維長度下標時的初始化 行下標 a 3 陣列元素個數除以列數,正好除盡,所得的商就是行數。a 3 陣列元素個數除以列數,除不...