for循环又称为遍历循环,从名字就可以知道,它用于对象的遍历
语法格式:
会从可迭代对象对象中依次拿出值来赋值给变量,变量的值每次都会被修改
for 变量1[变量2...] in 可迭代对象:
代码块
s = '123'
for n in s:
print(n)
# 1
# 2
# 3
range方法
格式:
range(stop) -> range object
range(start, stop[, step]) -> range object
返回一个对象,从start位置数字开始,到stop-1的位置数字结束,可以指定步长
示例:
for i in range(3):
# print(i)
# 0
# 1
# 2
for i in range(3, 8, 3):
print(i)
# 3
# 6
range方法经常和 for 组合使用,可以用来通过索引遍历序列类型
s = 'abc'
l = [1,3,4]
t = ('x','y',['name','sex'])
for i in range(len(s)):
print(s[i])
# a
# b
# c
for i in range(len(l)):
print(l[i])
# 1
# 3
# 4
for i in range(len(t)):
print(t[i])
# x
# y
# ['name', 'sex']
遍历字典
字典是没有索引的,因此只能使用for对其直接遍历
d = {'name': 'bone','age':15}
for k in d:
print(k)
# name
# age
直接遍历得到的是字典的key,可以通过key取值
d = {'name': 'bone','age':15}
for k in d:
print(d[k])
# bone
# 15
可以结合items方法,items得到字段key和values的元组形式值,使用两个变量来接收key和value
d = {'name': 'bone','age':15}
for k,v in d.items():
print(k,v)
# name bone
# age 15
遍历集合:
集合不是序列类型,无法通过索引遍历取值,直接使用for遍历它
s = {1,'a',5}
for i in s:
print(i)
# 1
# a
# 5
break和countinue
for 中使用break和countinue和while是一样的
- break:立即终止循环
- continue:结果当前循环,继续下一个循环
s = '12345678'
for i in s:
if i == '3':
break
print(i)
# 1
# 2
for i in range(8):
if i%2 != 0:
continue
else:
print(i)
# 0
# 2
# 4
# 6
for… else结构
和while循环一样,for也可以和else组合使用,只有for循环正常结束才会运行for
s = '1234'
print('准备开始循环:')
for i in s:
if i == '3':
break
print(i)
else:
print('循环正常结束')
print('循环执行完毕')
# 准备开始循环:
# 1
# 2
# 循环执行完毕
s = '1234'
print('准备开始循环:')
for i in s:
if i == '3':
continue
print(i)
else:
print('循环正常结束')
print('循环执行完毕')
# 准备开始循环:
# 1
# 2
# 4
# 循环正常结束
# 循环执行完毕
推导式
for 循环还有一个强大的功能,就是推导式,通过推导式可以快速生成列表、元组、字典、集合的数据
推导列表
语法格式
[表达式 for 变量1[变量2..] in 可迭代对象 [if语句]]
示例:
l = [i for i in range(3)]
print(l) # [0, 1, 2]
l = [i**2 for i in range(10) if i%2 != 0]
print(l) # [1, 9, 25, 49, 81]
l = [(i**2,j*2) for i in range(5) for j in range(3) if i%2 !=0 if j%2==0 ]
print(l) # [1, 9, 25, 49, 81]
推导元组
元组跟列表的操作一摸一样,只不过使用小括号,得到的结果是一个对象,叫生成器
语法格式
(表达式 for 变量1[变量2..] in 可迭代对象 [if语句])
示例:
t = (i for i in range(3))
print(t) # <generator object <genexpr> at 0x7fe14a657ac0>
t = (i**2 for i in range(10) if i%2 != 0)
print(t) # <generator object <genexpr> at 0x7fe14b10d120>
t = ((i**2,j*2) for i in range(5) for j in range(3) if i%2 !=0 if j%2==0 )
print(t) # <generator object <genexpr> at 0x7fe14a657ac0>
如果想要获得元组,需要使用tuple方法
t = (i for i in range(3))
print(t) # <generator object <genexpr> at 0x7fe14a657ac0>
print(tuple(t)) # (0, 1, 2)
推导字典
操作也是一样,只不过使用大括号,表达式需要是 k:v 形式,得到的结果是一个字典
{k:v for 变量1[变量2..] in 可迭代对象 [if语句]}
示例:
d = {k:None for k in 'abc'}
print(d) # {'a': None, 'b': None, 'c': None}
d = {'a': 2, 'b': 30}
d1 = {k: v for k,v in d.items() if v!=2}
print(d1) # {'b': 30}
推导集合
操作跟列表、元组一样,使用大括号
se = {i for i in 'abc12d' if i.isdigit()}
print(se) # {'1', '2'}