增加時(shí)a.append( 'a ')就可以了。只要按順序加,就沒有問題 。
使用時(shí),完全可以使用下標(biāo):
代碼如下 復(fù)制代碼
a[0]
a[1]
但出果引用不存在的下標(biāo),則會引發(fā)異常。這時(shí),你需要先添加元素,再引用就沒有問題 了。如果想預(yù)先保留空間,可以使用循環(huán)來給list,每個元素一個缺省值,再引用就不會有問題 了。
如:
代碼如下 復(fù)制代碼
a=[]
for i in range(100):
a.append([])
for j in range(100):
a[i].append(0)
這樣就生成了一個100*100缺省值為0的數(shù)組。
#創(chuàng)建一個寬度為3,高度為4的數(shù)組
#[[0,0,0],
# [0,0,0],
# [0,0,0],
# [0,0,0]]
myList = [[0] * 3] * 4但是當(dāng)操作myList[0][1] = 1時(shí),發(fā)現(xiàn)整個第二列都被賦值,變成
[[0,1,0],
[0,1,0],
[0,1,0],
[0,1,0]]
為什么...一時(shí)搞不懂,后面翻閱The Python Standard Library 找到答案
list * n—>n shallow copies of list concatenated, n個list的淺拷貝的連接
例:
代碼如下 復(fù)制代碼
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]][[]]
是一個含有一個空列表元素的列表,所以[[]]*3表示3個指向這個空列表元素的引用,修改任何
一個元素都會改變整個列表:
所以需要用另外一種方式進(jìn)行創(chuàng)建多維數(shù)組,以免淺拷貝:
代碼如下 復(fù)制代碼
>>> 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]]之前的二維數(shù)組創(chuàng)建方式為:
myList = [([0] * 3) for i in range(4)]
比如, 要動態(tài)創(chuàng)建一個 二維數(shù)組:
代碼如下 復(fù)制代碼
int** pTwoDimArr = new int[10][20];
pTwoDimArr[0][0] = 5;
這樣好像很直觀,不過,編譯會出錯:
代碼如下 復(fù)制代碼
cannot convert from 'int (*)[20] ' to 'int ** '
如果這樣:
代碼如下 復(fù)制代碼
int pTwoDimArr[10][20];
pTwoDimArr[0][0] = 5;
是可以的,但是 這個數(shù)組的內(nèi)存卻是在棧上分配的,所以,
代碼如下 復(fù)制代碼
void main(){
int pTwoDimArr[1000][1000];
}
編譯沒問題,運(yùn)行就會死掉
作為全局變量是可以的,但最好杜絕吧
代碼如下 復(fù)制代碼
int pTwoDimArr[1000][1000];
void main(){
}
這樣:
代碼如下 復(fù)制代碼
int (*pTwoDimArr)[1000] = new int[1000][1000];
pTwoDimArr[0][0] = 5;
動態(tài)分配是可以的, 一來記得釋放內(nèi)存,二來維數(shù)還是要固定的(第一維可變),是不是有些不爽
因?yàn)? C++ 是“靜態(tài)”語言, 在編譯期要確定好一切,所以在多維數(shù)組的定義時(shí)除了第一維可變外,其他幾維都要固定為常數(shù),因?yàn)閿?shù)組在內(nèi)存中是線性存儲的。
from:http://www.111cn.net/phper/python/41780.htm
新聞熱點(diǎn)
疑難解答
圖片精選