二維列表是將其他列表當作列表的元素放在一個列表當中,也就是列表的嵌套。有接觸過C或C++的可能了解數組這個概念,在Python中數組存在於第三方庫中,因此在不安裝第三方插件的前提下我們想要在Python中使用數組方法,就要採用二維列表這個方法。
實際上列表中的元素可以是任何資料類型,我們看個例子:
my_list=[[1,2,3,4,5],'dotcpp',{1,2,3,},('www','dotcpp','com')]print(my_list)
輸出結果為:
[[1,2,3,4,5],'dotcpp',{1,2,3},('www','dotcpp','com')]
在這個列表中包含了列表,字串,集合,元組。當一個列表中的元素全部為列表的時候,是我們最常用的二維列表,下面會介紹幾種二維列表的建立方法及其存取方式。
直接創建法就是定義了列表名字之後直接進行輸入,我們來定義一個簡單的小鍵盤,即1-9:
my_list=[[1,2,3],[4,5,6],[7,8,9]]print(my_list)
輸出為:
[[1,2,3],[4,5,6],[7,8,9]]
我們在理解的時候可以這樣理解:
由圖可以看,my_list[0]對應的就是[1,2,3],因此我們在訪問1的時候,他對應的座標就為(0,0),我們可以透過索引訪問,即my_list[0 ][0],它的值對應的就是1,其他值訪問的方式和它一樣,像元素9對應的訪問方式就為my_list[2][2]。
使用循環也可以實現而為列表的創建,通常會採用for迴圈來實現,我們來創建一個6*6的二維列表,程式碼如下:
my_list=[]#先建立一個主清單foriinrange(6):#循環遍歷6次,依序為主清單的每個元素建立新的清單j=[]#先建立新清單並加入主清單中my_list. append(j)forminrange(1,7):j.append(m)#為子清單新增元素print(my_list)#輸出
輸出為:
[[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3, 4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6]]
輸出的實際結果應是在一行中,為了方便大家理解所以這樣排列,大家也可以透過while循環嘗試一下去創建一個二維列表。
使用列表推導式也是可以建立二維列表的,上一節我們剛剛學習過列表推導式,因此我們可以直接使用這種方式來簡化我們的程式碼。
我們再次創建一個六行六列的二維列表,它的程式碼就相對簡潔很多,程式碼如下:
my_list=[[iforiinrange(1,7)]forjinrange(1,7)]print(my_list)
輸出為:
[[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3, 4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6]]
這種方式的不僅節省時間還優化了程式碼,等同於循環創建了6個列表並賦予了6個值,最後他們是放在了一個列表中構成了二維列表。
再透過一個例子來進一步了解。
我們想要建立一個6*6的列表,然後裡面的值從1-100中隨機取值。程式碼如下:
importrandom#random屬於系統庫中的模組,可以隨時調用,這裡簡單的了解一下my_list=[]#先創建列表foriinrange(6):#循環創建6個列表並放入my_list中j=[]my_list.appen d(j)forkinrange(6):c=random.randint(1,100)#呼叫了random中的一個產生隨機數的方法,把產生的隨意數的值賦給cj.append(c)#把c的值加入清單j中print(my_list)
輸出為:
[[52,83,15,35,54,60],[17,61,77,99,60,50],[88,81,9,61,76,95],[21,52,20, 49,10,61],[94,81,48,27,80,9],[1,94,57,66,95,97]]
這題的想法和上面第二種方法是一致的,如果對列表推導式掌握的不熟練的同學可以在初期使用這種方式,它對比於前面的例子增添了一個隨機取值功能。
關於二維列表,這一點對於要參加競賽的同學很重要,不管是之後遇到迷宮問題還是2n皇后問題,都離不開二維列表的使用,因此在這裡先簡單的介紹一下,大家在可以初步了解,在後續競賽題中會有關於這兩種類型題的講解,當然也能更進一步的去了二維列表。