[Python3] 遍历复合列表[TZZ]
1、启动已安装的Python IDLE程序,然后点击菜单栏上的“File > New File”新建一个Python源代码文件(由Python内置的文本编辑器打开);
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/bfa52adaf05e4a23d2f479a91dd818196020e2d9.jpg)
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/6061b9cd0c6efbf2b136f263127bbbf4db58dad9.jpg)
2、在新打开的代码编辑窗口中,编写一段遍历输出一维列表中所有元素的代码。为了指明输出的内容是什么,可以在输出列表元素之前写上一条打印语句;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/739bc049610f8b561181a9dc9ce951e10ff8d3d9.jpg)
3、代码编写完毕后,点击菜单栏上的“File > Save”(或者Ctrl + S)保存新建的源代码文件(记得取一个有意义的名字并存放在容易找到的位置);
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/5917cb3da824d8e909573cd2da598540112ac8d9.jpg)
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/05a320a23a42a07a6e953b87673834bb18efc1d9.jpg)
4、保存完代码之后,可以通过菜单栏上的“Run > Check Module”(或者ALT + X)执行代码检查,如果代码有语法错误,它会弹出错误提示,并用红色标记出源代码中的出错位置。如果没有问题,则什么也不会发生;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/0d55dc7bd282868979c3300565f97fbd4d7c37de.jpg)
5、执行代码语法检查后,点击菜单栏上的“Run > Run Module”(或F5),运行编辑器中的Python代码。执行完毕后,可以在Python Shell中见到输出的内容;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/32fbcd41037de1372af3a508f6c5cf672a5f2ade.jpg)
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/f591ab03c8d246fea8cb4537b8bf3bef344f1ede.jpg)
6、在代码中定义一个名为composite的复合列表并使用内建函数print将其输出。列表的值尽可能多套几层,增加遍历的难度。写完代码后,按F5执行代码,可以在Shell中见到输出的结果。注意,每次执行代码时,Shell环境会自动重置。print函数可以将复合列表按定义的格式输出;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/340e4eb8b43ea8dba0cf7d86189c2cf7deb216de.jpg)
7、写一个遍历composite列表的for..in循环,将其中的所有元素输出。写完代码后执行。查看Shell中的输出,发现其中仍然有子列表的元素没有遍历到;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/dd58d02c5b1b1edef45a278d981fceecd2d90fde.jpg)
8、为了遍历列表中的列表元素,可以通过内建函数isinstance判断列表中的元素是否是一个列表。如果是,则继续用for..in循环遍历其中的元素。不是,则直接输出。修改遍历composite列表的代码,增加遍历列表元素的代码。写完代码后,按F5运行代码。查看Shell中的输出内容,发现第1级列表中的子列表元素已经可以正常输出了;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/6834ecc4ec9959430d87cf4a95425d6b05d104de.jpg)
9、为了遍历更多层的子列表元素,继续向代码中添加更多的if和for..in语句。写好代码后,继续按F5运行。查看Shell中的输入,发现总共写了3层for..in循环后,已经可以遍历composite列表中的所有元素了。可是,如果列表层次再多一些,难道要继续写内层的处理循环?
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/486884883913e8e5fe682a08352f477047187dde.jpg)
10、仔细观察if和for..in嵌套的代码,发现它符合某种模式。这种模式似乎可以用递归来实现。而且递归可以支持无限层次的列表嵌套。根据之前的composite列表遍历代码,定义一个打印列表元素的printList函数,然后调用该函数打印composite列表中的元素;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/de9bfa3b3b86022154d114e2d8bbf82065fb72de.jpg)
11、为了让打印的列表看上去更加直观,可以根据列表的级别,添加指定数量的‘-’字符。根据这一想法,可以实现一个改进版的printList2函数,然后执行F5测试一下。OK,输出很正常;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/65ba880b312105612725d25d08aee8d7582a6ade.jpg)
12、再写个测试函数测试一下;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/586bfdefe0781431f430b5d8dc6699cf035362de.jpg)
13、继续改进,增加可以自定义间隔增长的参数,实现printList3函数。然后运行测试一下;
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/988e1c532f632385d2b06525cce833e038725dde.jpg)
14、继续调用printList3函数,传入不同的参数并运行代码。OK,一切正常!
![[Python3] 遍历复合列表[TZZ]](https://exp-picture.cdn.bcebos.com/3c42a5ea3e8630485ac55060c33104ebf7a752de.jpg)
15、下一篇,我决定把之前写的函数放到Python的模块中。Enjoy!