Python建立二維陣列 關於list的乙個小坑

2021-10-21 03:17:49 字數 1968 閱讀 9759

1.遇到的問題

今天寫python**的時候遇到了乙個大坑,差點就耽誤我交作業了。。。

問題是這樣的,我需要建立乙個二維陣列,如下:

m = n =

3test =[[

0]* m]

* nprint

("test ="

, test)

輸出結果如下:

test =[[

0,0,

0],[

0,0,

0],[

0,0,

0]]

是不是看起來沒有一點問題?

一開始我也是這麼覺得的,以為是我其他地方用錯了什麼函式,結果這麼一試:

'''

'''m = n =

3test =[[

0]* m]

* nprint

("test ="

, test)

test[0]

[0]=

233print

("test ="

, test)

輸出結果如下:

test =[[

0,0,

0],[

0,0,

0],[

0,0,

0]]test =[[

233,0,

0],[

233,0,

0],[

233,0,

0]]

note also that the copies are shallow; nested structures are not copied. this often haunts new python programmers; consider:

>>

> lists =[[

]]*3

>>

> lists[[

],,]

>>

> lists[0]

3)>>

> lists[[

3],[

3],[

3]]

>>

>

>>

> lists =[[

]for i in

range(3

)]>>

> lists[0]

3)>>

> lists[1]

5)>>

> lists[2]

7)>>

> lists[[

3],[

5],[

7]]

也就是說matrix = [array] * 3操作中,只是建立3個指向array的引用,所以一旦array改變,matrix中3個list也會隨之改變。

2.建立二維陣列的辦法

2.1 直接建立法

test =[0

,0,0

],[0

,0,0

],[0

,0,0

]]

簡單粗暴,不過太麻煩,一般不用。

2.2 列表生成式法

test =[[

0for i in

range

(m)]

for j in

range

(n)]

學會使用列表生成式,終生受益。

2.3 使用模組numpy建立

import numpy as np

test = np.zeros(

(m, n)

, dtype=np.

int)

Python二維陣列建立

建立方法 1.直接建立 2.列表生成 3.numpy建立 遇到的問題 a 3 print a 輸出為 1,2,3 1,2,3 1,2,3 原因是建立乙個列表,然後複製上個,相當於二維陣列中,引用的是同乙個一位陣列。意思就是 a b 3只是建立了3個指向b的應用,所以一旦b改變,a中的3個列表 也會改...

Python建立二維陣列

因一次筆試中忘記如何用python建立二維陣列,遂記錄下來.成功沒有捷徑,一定要腳踏實地.沒有使用numpy模組,若想使用numpy模組建立二維陣列請移步。一 初始化乙個元素從0 n m的二維陣列 row int input column int input dp i column j for j ...

Python二維陣列的建立

如果在python中想要建立乙個二維陣列,我們該如何寫呢?a 0 3 4 b 0 3 4 是a還是b呢?當然是b了!還是先輸出看一下 a 0,0,0,0,0,0,0,0,0,0,0,0 b 0,0,0 0,0,0 0,0,0 0,0,0 不出所料,我們應該按照b 0 3 4來建立二維陣列。but!當...