python初始化二維陣列的小問題

2021-08-02 10:03:18 字數 1003 閱讀 8313

引子:今天在用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 陣列元素個數除以列數,除不...