1. while循环
1) 循环
i = 0
print(i)
i = i + 1
print(i)
i = i + 1
print(i)
i = i + 1
# 逐行输出:0 1 2
2) while循环
当满足条件时,就一直重复执行某段代码。如上例可用while循环改写为:
i = 0
while i < 3:
print(i)
i = i + 1while循环的组成:
while 循环条件:
循环体
在满足循环条件的情况下,计算机会自上而下重复执行循环体内的代码,直到不满足循环条件时结束循环。
Note: i = i + 1可以简写为i += 1,即A += B等价于A = A + B。
3) 死循环
一个靠自身控制无法终止的程序称为死循环。如果没有控制好循环条件,很可能会引发死循环。
while True:
print('Hello World')
# 由于循环条件一直是True,所以会永无止境地打印Hello World
i = 0
while i < 3:
print(i)
# 由于漏掉了i = i + 1,导致i的值一直为0,进入死循环
Note: 死循环会导致后续代码无法执行,甚至导致CPU占用过高电脑死机,因此要控制好循环条件。
2. for循环
1) for循环
格式:
for 变量 in 序列:
循环体
Note: for循环没有循环条件,而是通过for…in…的语法进行循环,循环的次数就是in后面序列的元素个数。
for i in [0, 1, 2]:
print(i + 1)
# 逐行输出:1 2 3
for循环的特性:依次遍历序列中的元素,并依次赋值给变量,最后执行统一的处理。
2) 序列
指与列表有相似特性的类型,列表、元组、字符串都属于序列。他们都存着一组数据,可以通过索引访问里面的元素,可以使用for循环遍历。
range()函数生成序列,可与for循环一起使用:
for i in range(3):
print(i)
# 逐行输出:0 1 2
上面的代码等同于:
for i in range[0, 1, 2]:
print(i)
# 逐行输出:0 1 2
range()函数可以很方便地写出循环n次的代码,比如实现"I love you three thousand":
for i in range(3000):
print('I love you')
又如,按数字排序命名100个Excel文件:
for i in range(100):
filename = '材料' + str(i + 1) + '.xlsx'
print('正在处理' + filename)
3) 循环体
循环的核心代码,即被重复执行的部分。
for i in range(10):
print(i * 2)
# 将0-9每个数乘以2打印
for i in range(10):
if i > 5:
print(i)
# 将0-9中大于5的数打印
也可在循环中嵌套循环,如打印九九乘法表:
for i in range(1, 10):
for j in range(1, i + 1):
print(str(j) + 'x' + str(i) + '=' + str(i * j) + '\t', end = '')
# \t是制表符,用来对齐。end默认是\n,打印后会换行,end = ''可以防止换行
print('')
# 打印完一行后换行
4) 列表生成式
生成一个[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]的列表:
y = []
for x in range(1, 11):
(x * x)
以上代码用列表生成式可简化为:
y = [x * x for x in range(1, 11)]
也可在for…in…后加上条件判断以筛选出奇数的平方:
y = [x * x for x in range(1, 11) if x % 2 == 1]
print(y)
# 输出:[1, 9, 25, 49, 81]
综上,列表生成式的语法规则是:
[表达式 for循环 条件判断(可选)]
Eg: 筛选低于60的分数:
scores = [91, 4, 20, 67, 24, 13, 84, 40, 77, 47]
result = [x for x in scores if x < 60]
print(result)
5) break语句
break语句用于结束循环,常与条件判断一起使用,在特定条件下结束循环,后续循环代码不再执行。
break语句的用法:
while 循环条件:
……
if 循环结束条件:
break # 满足条件触发break语句
…… # 结束循环,执行循环后代码
for 变量 in 循环序列:
……
if 循环结束条件:
break # 满足条件触发break语句
…… # 结束循环,执行循环后代码
实例如:
# while循环
i = 0
while i < 5:
i = i + 1
if i == 3:
break
print(i)
print('循环结束')
# 逐行输出:1 2 循环结束
# for循环
for i in range(5):
i = i + 1
if i == 3:
break
print(i)
print('循环结束')
# 逐行输出:1 2 循环结束
Note: break语句可以在特定条件下跳出死循环,相当于将循环条件放到了循环体中,用if和break语句来判断并终止循环。
6) continue语句
continue语句用于在特定情况下跳过当前循环体中的剩余语句,继续进行下一轮循环,常和条件判断一起使用。
while 循环条件:
……
if 循环结束条件:
continue # 跳到循环开头,进行下一轮循环
for 变量 in 循环序列:
……
if 循环结束条件:
continue # 跳到循环开头,进行下一轮循环
实例如:
# while循环
i = 0
while i < 5:
i = i + 1
if i == 3:
continue
print(i)
print('循环结束')
# 逐行输出:1 2 4 5 循环结束
# for循环
for i in range(5):
i = i + 1
if i == 3:
continue
print(i)
print('循环结束')
# 逐行输出:1 2 4 5 循环结束
Note: break语句用于结束循环,continue语句用于跳过当前循环,所以continue语句不能跳出死循环。
Note: break语句和continue语句都需缩进。
3. 总结拓展
1) while循环和for循环辨析相同点:将一件事重复n遍;
不同点:while循环更适合循环次数不确定的情况,for循环更适合循环次数确定的情况。
2) break和continue语句辨析break:跳出整个循环;
continue:跳出当前循环。
3) zip()函数
zip()函数和for循环结合可以同时遍历多个列表。
names = ['吴承恩', '罗贯中', '施耐庵', '曹雪芹']
books = ['西游记', '三国演义', '水浒传', '红楼梦']
for name, book in zip(names, books):
print(book + '的作者是' + name)
# 输出:
# 西游记的作者是吴承恩
# 三国演义的作者是罗贯中
# 水浒传的作者是施耐庵
# 红楼梦的作者是曹雪芹
zip()函数生成的列表中的元素是一个个元组,上例中name, book这样用逗号分隔开的写法可以获取元组中对应的元素。
Note: 当用zip()函数同时遍历多个列表时,如果两个列表长度不一样,遍历次数以长度短的列表长度为准。
4) enumerate()函数
作用:同时给出序列的元素下标和元素。
names = ['吴承恩', '罗贯中', '施耐庵', '曹雪芹']
for index, item in enumerate(names):
print(index, item)
# 输出:
# 0 吴承恩
# 1 罗贯中
# 2 施耐庵
# 3 曹雪芹
上述代码中,index是列表中元素的索引,item是列表中对应的元素。
Note: enumerate()函数返回值是enumerate类型,也需要用list()函数转换。
names = ['吴承恩', '罗贯中', '施耐庵', '曹雪芹']
print(list(enumerate(names)))
# 输出:[(0, '吴承恩'), (1, '罗贯中'), (2, '施耐庵'), (3, '曹雪芹')]
enumerate()函数生成的新列表中的元素也是元组,元组中第一个元素是索引,第二个元素是原来列表中对应索引的元素。
Reference:
[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython, 2nd Edition [M]. O'Reilly Media, Inc.
[2] ****博客. Python博客[OL]. /nav/python. 2020.