二维列表是将其他列表当做列表的元素放在一个列表当中,也就是列表的嵌套。有接触过C或C++的可能了解数组这个概念,在Python中数组存在于第三方库中,因此在不安装第三方插件的前提下我们想要在Python中使用数组方法,就要采用二维列表这个方法。
实际上列表中的元素可以是任何数据类型,我们看个例子:
1 2 | my_list = [[ 1 , 2 , 3 , 4 , 5 ], 'dotcpp' ,{ 1 , 2 , 3 ,},( 'www' , 'dotcpp' , 'com' )] print (my_list) |
输出结果为:
1 | [[ 1 , 2 , 3 , 4 , 5 ], 'dotcpp' , { 1 , 2 , 3 }, ( 'www' , 'dotcpp' , 'com' )] |
在这个列表中包含了列表,字符串,集合,元组。当一个列表中的元素全部为列表的时候,是我们最常用的二维列表,下面会介绍几种二维列表的创建方法及其访问方式。
1. 直接创建法
直接创建法就是定义了列表名字之后直接进行输入,我们来定义一个简单的小键盘,即1-9:
1 2 | my_list = [[ 1 , 2 , 3 ],[ 4 , 5 , 6 ],[ 7 , 8 , 9 ]] print (my_list) |
输出为:
1 | [[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]] |
我们在理解的时候可以这样理解:
索引 | 0 | 1 | 2 |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
2 | 7 | 8 | 9 |
由图可以看,my_list[0]对应的就是[1,2,3],因此我们在访问1的时候,他对应的坐标就为(0,0),我们可以通过索引访问,即my_list[0][0],它的值对应的就是1,其他值访问的方式和它一样,像元素9对应的访问方式就为my_list[2][2]。
2. 循环创建法
使用循环也可以实现而为列表的创建,通常会采用for循环来实现,我们来创建一个6*6的二维列表,代码如下:
1 2 3 4 5 6 7 | my_list = [] #先创建一个主列表 for i in range ( 6 ): #循环遍历6次,依次为主列表的每个元素创建新的列表 j = [] #先创建新列表并添加入主列表中 my_list.append(j) for m in range ( 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 ], [ 1 , 2 , 3 , 4 , 5 , 6 ]] |
输出的实际结果应是在一行中,为了方便大家理解所以这样排列,大家也可以通过while循环尝试一下去创建一个二维列表。
3. 列表推导创建法
使用列表推导式也是可以创建二维列表的,上一节我们刚刚学习过列表推导式,因此我们可以直接使用这种方式来简化我们的代码。
我们再次创建一个六行六列的二维列表,它的代码就相对简洁很多,代码如下:
1 2 | my_list = [[i for i in range ( 1 , 7 )] for j in range ( 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 ], [ 1 , 2 , 3 , 4 , 5 , 6 ]] |
这种方式的不仅节省时间还优化了代码,等同于循环创建了6个列表并赋予了6个值,最后他们是放在了一个列表中构成了二维列表。
4. 例题
再通过一个例子来进一步了解一下。
我们想要创建一个6*6的列表,然后里面的值从1-100中随机取值。代码如下:
1 2 3 4 5 6 7 8 9 | import random #random属于系统库中的模块,可以随时调用,这里简单的了解一下 my_list = [] #先创建列表 for i in range ( 6 ): #循环创建6个列表并放入my_list中 j = [] my_list.append(j) for k in range ( 6 ): c = random.randint( 1 , 100 ) #调用了random中的一个生成随机数的方法,把生成的随意数的值赋给c j.append(c) #把c的值加入到列表j中 print (my_list) |
输出为:
1 2 3 4 5 6 | [[ 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 ]] |
这道题的思路和上面第二种方法是一致的,如果对列表推导式掌握的不熟练的同学可以在初期使用这种方式,它对比于前面的例子增添了一个随机取值功能。
5. 总结
关于二维列表,这一点对于要参加竞赛的同学很重要,不管是之后遇到迷宫问题还是2n皇后问题,都离不开二维列表的使用,因此在这里先简单的介绍一下,大家在可以初步了解,在后续竞赛题中会有关于这两种类型题的讲解,当然也能更进一步的去了二维列表。