2.13.3 多重循环

循环可以嵌套,嵌套的循环被称为多重循环。

比如,麻将有1~9万,有1~9饼,有1~9条,我们想用简洁的代码把它们一一列举出来。先把1~9这9个数字列举出来。


for num in range(1, 10):
    print(num)

执行结果如下:


1
2
3
4
5
6
7
8
9

针对每个数值,麻将都有相应的“万”“饼”“条”,这又可以构成一重嵌套的循环。


for num in range(1, 10):
    for category in ['万', '饼', '条']:
        id = str(num) + category
        print(id)
    print()

输出结果如下(为了节省篇幅,部分输出内容被截掉)。


1万
1饼
1条

2万
2饼
2条

3万
3饼
3条

循环还可以有更多重嵌套,但是这样的代码执行效率很低,而且,层次结构太深的代码可读性比较差,应该尽量避免。

比如,有两个list,分别是python_students和java_students。其中,python_students包含了选修Python课程的学生信息,java_students包含了选修Java课程的学生信息,我们想知道哪些学生没有选修Java,只选修了Python。

要得到答案,我们需要遍历python_students。在每次循环中,针对得到的元素,对应学生的学号,然后针对java_students进行嵌套的遍历,来确认该学生是不是也选修了Java。

这样的设计在逻辑上是可行的,只是执行效率低。针对这样的情况,我们应该考虑用更合适的数据结构,比如,把python_students设计成字典而不是list,用学生的id作为key,这样,后续的很多操作就会简洁而高效。