本篇札记是自己在学习《利用
Python
进行数据分析》一书中看到了break
和continue
的例子,觉得有必要理解下Python
中的for
循环控制语句。在Python
中控制流主要有三种:if
、break
和continue
。本文中讲解一下后两种,同时讲解Python
中缩进对代码的影响。
- break
- 缩进不同对代码输出影响
- continue
break
- 一层循环遇到
break
条件满足,直接结束循环 - 当
if
条件不满足的时候,执行sum+=i
的操作
list2 = [1,2,3,5,8,4,9]
sum = 0
for i in list2:
if i == 8: # 满足条件终止整个循环,后面的也不会执行,i=8循环结束
break
sum += i
sum # 11=1+2+3+5
- 两层循环,
break
只能终止内层循环,外层循环继续 -
缩进不同,代码块不同,数据结构完全不同
,对输出结果造成影响,看下面的三种情形:
缩进不同对代码输出影响
情形1:print和第一个for对齐
-
break
控制内层循环即第二层 - 代码是按照顺序依次执行的
-
print
不在循环体里面,只有等最外层的for
全部执行完毕才会执行
image.png
for i in range(4):
for j in range(4):
if j > i:
break
print((i, j)) # 最外层的for循环结束才会执行print语句,与for对齐
# 结果
(3, 3)
i | j | 是否满足break | 是否输出 |
---|---|---|---|
0 | 0 | 否(继续j的循环) | 否 |
0 | 1 | 是(跳出j的循环) | 否 |
1 | 0 | 否(继续j的循环) | 否 |
1 | 1 | 否(继续j的循环) | 否 |
1 | 2 | 是(跳出j的循环) | 否 |
2 | 0 | 否(继续j的循环) | 否 |
2 | 1 | 否(继续j的循环) | 否 |
2 | 2 | 否(继续j的循环) | 否 |
2 | 3 | 是(跳出j的循环) | 否 |
3 | 0 | 否(继续j的循环) | 否 |
3 | 1 | 否(继续j的循环) | 否 |
3 | 2 | 否(继续j的循环) | 否 |
3 | 3 | 否(继续j的循环) | 是(输出最后的一次结果) |
3 | 4 | 是(跳出j的循环) | 结束 |
情形2:print和第二层for对齐
-
break
只能控制离它最近的循环,此处为第二层循环 - 每次当有i进来,只有第二层
for
循环执行完毕,输出打印print
结果 -
print
在第一个for
循环里面,for
循环了4
次,所以输出4
个结果
for i in range(4):
for j in range(4):
if j > i:
break
print((i, j))
# 结果
(0, 1)
(1, 2)
(2, 3)
(3, 3)
i | j | 是否满足break | 是否输出 |
---|---|---|---|
0 | 0 | 否(继续j) | 否 |
0 | 1 | 是(跳出j) | 是,输出当前(i,j)值(0,1) |
1 | 0 | 否(继续j) | 否 |
1 | 1 | 否(继续j) | 否 |
1 | 2 | 是(跳出j) | 是,输出当前(i,j)值(1,2) |
2 | 0 | 否(继续j) | 否 |
2 | 1 | 否(继续j) | 否 |
2 | 2 | 否(继续j) | 否 |
2 | 3 | 是(跳出j) | 是,输出当前(i,j)值(2,3) |
3 | 0 | 否(继续j) | 否 |
3 | 1 | 否(继续j) | 否 |
3 | 2 | 否(继续j) | 否 |
3 | 3 | 否(整个循环结束) | 是,输出当前(i,j)值(3,3) |
情形3
for i in range(4):
for j in range(4):
if j > i:
break # break只能终止内层j循环;不满足if条件则执行print语句
print((i, j))
# 结果
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)
(3, 0)
(3, 1)
(3, 2)
(3, 3)
解释
i | j | 是否满足break | 是否输出 |
---|---|---|---|
0 | 0 | 否(继续j) | 是 |
0 | 1 | 是(结束j) | 是 |
1 | 0 | 否(继续j) | 是 |
1 | 1 | 否(继续j) | 是 |
1 | 2 | 是(结束j) | 是 |
2 | 0 | 否(继续j) | 是 |
2 | 1 | 否(继续j) | 是 |
2 | 2 | 否(继续j) | 是 |
2 | 3 | 是(结束j) | 是 |
3 | 0 | 否(继续j) | 是 |
3 | 1 | 否(继续j) | 是 |
3 | 2 | 否(继续j) | 是 |
3 | 3 | 否(继续j) | 是 |
3 | 4 | 是(结束j) | 是 |
continue
continue
表示:满足当前条件,结束本次循环,继续下次循环
;上面的break
是直接终止后面的循环。
list1 = [1, 2, 3, None, 6, None, 8]
sum = 0
for i in list1:
if i == None:
continue # 满足条件表示跳出当前循环,后面的循环继续执行
sum += i
sum # 20
网友评论