另一个常用的循环语句是for循环。可以按照顺序遍历可迭代对象中的内容。
一、基本结构
for循环的基本结构如下:
'''
for <variable> in <sequence>:
<statements>
else:
<statements>
这里的else语句是可选的,可以根据需要选择是否使用
'''
s = 'fuiyoiop'
for i in s:
print(i)
else:
print('遍历完成')
上述代码的运行结果如下:
可以看到和while循环结构很像,那如果在循环中加入break,会不会也和while循环一样,不再执行else后的语句了呢?我们来验证一下,修改上述代码为:
s = 'fuiyoiop'
for i in s:
if i == 'y':
break
print(i)
else:
print('遍历完成')
运行结果为:
可以看到,和while循环一样,当使用break关键字终止循环后,else下的语句将不会被执行。同样的,如果语句里加入continue,只会终止本次循环,当结束循环后,else后的语句会被执行:
s = 'fuiyoiop'
for i in s:
if i == 'y':
continue
print(i)
else:
print('遍历完成')
执行结果为:
二、range()函数
如果要将一句话打印多次要怎么做呢?我们知道,如果使用while循环的话,需要声明一个变量,每循环一次,变量加一,如:
# 将‘你好’打印5次
count = 0
while count < 5:
print('你好')
count += 1
那使用for循环要怎么做呢?首先我们要生成一个迭代对象,用来计数,比如'12345'或者[1,2,3,4,5]等。python提供了一个函数range(),可以在指定范围内生成数列:
for i in range(10): # 打印0-9之间的所有整数,这里的range(10)相当于range(0,10)
print(i)
for i in range(1, 10, 2): # 在1-9之间,每隔一个数打印一次(最后一位表示步长)
print(i)
for i in range(10, 1, -1): # 反向步长
print(i)
# range(start_num, end_num)函数生成的数字范围为:[start_num, end_num-1)
打印5次‘你好’的代码可以写成:
for i in range(5):
print('你好')
三、enumerate函数
这里顺带说一下enumerate()函数,对于一个可迭代的(iterable)/可遍历的对象(如列表,字符串),enumerate将其组成一个索引序列,利用此函数可以同时获得索引和值。
alist = ['Lily', 'like', 'dislike', 'music']
for i in enumerate(alist):
print(i)
运行结果如下:
通过type函数可以看到,生成的是一个个元组,如果想直接得到索引和值,可以将上述代码改为:
alist = ['Lily', 'like', 'dislike', 'music']
for index, value in enumerate(alist): # 其中index是索引,value是值,也可以使用别的变量名
print(index, value)
输出结果为:
其中索引是int型,值的数据类型和其在列表中定义的一致。enumerate函数支持修改索引的起始值(默认为0),比如我们可以改成以100作为起始索引:
alist = ['Lily', 'like', 'dislike', 'music']
for index, value in enumerate(alist, 100):
print(index, value)
执行结果如下: