python中陣列用法

2022-05-02 12:30:10 字數 1466 閱讀 2821

**如下 複製** 

a[0] 

a[1] 

但出果引用不存在的下標,則會引發異常。這時,你需要先新增元素,再引用就沒有問題 了。如果想預先保留空間,可以使用迴圈來給list,每個元素乙個預設值,再引用就不會有問題 了。 

如:這樣就生成了乙個100*100預設值為0的陣列。

#建立乙個寬度為3,高度為4的陣列

#[[0,0,0], 

# [0,0,0],

# [0,0,0],

# [0,0,0]]

mylist = [[0] * 3] * 4但是當操作mylist[0][1] = 1時,發現整個第二列都被賦值,變成

[[0,1,0],

[0,1,0],

[0,1,0],

[0,1,0]]

為什麼...一時搞不懂,後面翻閱the python standard library 找到答案

list * n—>n shallow copies of list concatenated, n個list的淺拷貝的連線

例:是乙個含有乙個空列表元素的列表,所以*3表示3個指向這個空列表元素的引用,修改任何

乙個元素都會改變整個列表:

所以需要用另外一種方式進行建立多維陣列,以免淺拷貝:

[[3], [5], [7]]之前的二維陣列建立方式為:

mylist = [([0] * 3) for i in range(4)]

比如, 要動態建立乙個 二維陣列:

**如下 複製** 

int** ptwodimarr = new int[10][20]; 

ptwodimarr[0][0] = 5;

這樣好像很直觀,不過,編譯會出錯:

**如下 複製** 

cannot convert from 'int (*)[20] ' to 'int ** '

如果這樣:

**如下 複製** 

int ptwodimarr[10][20]; 

ptwodimarr[0][0] = 5;

是可以的,但是 這個陣列的記憶體卻是在棧上分配的,所以,

**如下 複製** 

void main() 

編譯沒問題,執行就會死掉

作為全域性變數是可以的,但最好杜絕吧

**如下 複製** 

int ptwodimarr[1000][1000]; 

void main()

這樣:**如下 複製** 

int (*ptwodimarr)[1000] = new int[1000][1000]; 

ptwodimarr[0][0] = 5;

動態分配是可以的, 一來記得釋放記憶體,二來維數還是要固定的(第一維可變),是不是有些不爽

因為 c++ 是「靜態」語言, 在編譯期要確定好一切,所以在多維陣列的定義時除了第一維可變外,其他幾維都要固定為常數,因為陣列在記憶體中是線性儲存的。

from:

python中陣列與多維陣列用法介紹

如下 複製 a 0 a 1 但出果引用不存在的下標,則會引發異常。這時,你需要先新增元素,再引用就沒有問題 了。如果想預先保留空間,可以使用迴圈來給list,每個元素乙個預設值,再引用就不會有問題 了。如 這樣就生成了乙個100 100預設值為0的陣列。建立乙個寬度為3,高度為4的陣列 0,0,0 ...

Python學習 python陣列模組用法

array模組是python中實現的一種高效的陣列儲存型別。它和list相似,但是所有的陣列成員必須是同一種型別,因此在建立陣列的時候,就確定了陣列的型別 計算機為陣列分配一段連續的記憶體,從而支援對陣列隨機訪問 由於項的位址在編號上是連續的,陣列某一項的位址可以通過將兩個值相加得出,即將陣列的基本...

Python 陣列與多維陣列用法介紹

在做dp的時候遇到了乙個問題,構建n m的二維陣列的時候。構建dp 這樣構建會淺拷貝,造成!row 0 n 1 dp row m 1 print dp 0,0,0,0 0,0,0,0 0,0,0,0 0,0,0,0 dp 1 0 1 print dp 1,0,0,0 1,0,0,0 1,0,0,0 ...