增加時a.append( 'a ')就可以了。只要按順序加,就沒有問題 。
使用時,完全可以使用下標:
代碼如下 復制代碼
a[0]
a[1]
但出果引用不存在的下標,則會引發異常。這時,你需要先添加元素,再引用就沒有問題 了。如果想預先保留空間,可以使用循環來給list,每個元素一個缺省值,再引用就不會有問題 了。
如:
代碼如下 復制代碼
a=[]
for i in range(100):
a.append([])
for j in range(100):
a[i].append(0)
這樣就生成了一個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的淺拷貝的連接
例:
代碼如下 復制代碼
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]][[]]
是一個含有一個空列表元素的列表,所以[[]]*3表示3個指向這個空列表元素的引用,修改任何
一個元素都會改變整個列表:
所以需要用另外一種方式進行創建多維數組,以免淺拷貝:
代碼如下 復制代碼
>>> lists = [[] for i in ra(www.111cn.net)nge(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[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];
}
編譯沒問題,運行就會死掉
作為全局變量是可以的,但最好杜絕吧
代碼如下 復制代碼
int pTwoDimArr[1000][1000];
void main(){
}
這樣:
代碼如下 復制代碼
int (*pTwoDimArr)[1000] = new int[1000][1000];
pTwoDimArr[0][0] = 5;
動態分配是可以的, 一來記得釋放內存,二來維數還是要固定的(第一維可變),是不是有些不爽
因為 C++ 是“靜態”語言, 在編譯期要確定好一切,所以在多維數組的定義時除了第一維可變外,其他幾維都要固定為常數,因為數組在內存中是線性存儲的。