python中數組用法


增加時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++ 是“靜態”語言, 在編譯期要確定好一切,所以在多維數組的定義時除了第一維可變外,其他幾維都要固定為常數,因為數組在內存中是線性存儲的。

 


from:http://www.111cn.net/phper/python/41780.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM