前言
for
语句主要用于遍历某个可迭代的变量,例如:字符串、列表、元组等。
基本语法(一)
语法格式:
for 迭代变量 in 遍历序列:
执行语句......
1) 执行过程: 依次将‘遍历序列’的每一个值传递给‘迭代变量’,每传递一个值时执行一次内部语句,直至‘遍历序列’的最后一个元素,for语句退出。
2)遍历序列可以是字符串(str),列表(list),元组(tuple)....
实例如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
for x in "12ab":
print("Hello World",x)
实例输出:
hello world 1
hello world 2
hello world a
hello world b
可以看出,for语句 循环的次数等于字符串元素的个数,遍历时for语句把字符串的元素依次赋给了 x 并打印输出。
基本语法(二)
for 迭代变量 in range ( i, j [,k ]):
执行语句......
参数说明:
i: 初始值(默认为‘0’)
j: 终止值(默认为‘1’)
k: 步进值,即每次重复操作时比上一次操作所增长的数值。
执行过程:
第一步:将 i 值传递给 ‘迭代变量’,然后执行一次内部语句;
第二步:在 i 的基础上 + k 再次传递给 ‘迭代变量’,如果 ‘迭代变量’ 的值小于 ‘j’ 的值,则再次执行内部语句,否则退出 for 循环。
实例如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
for x in range(5):
print("Hello World",x)
运行输出:
hello world 0
hello world 1
hello world 2
hello world 3
hello world 4
可以看出,for
语句从 range()
中一共获取了 0~4 五个值,所以 for
语句在这里循环执行了5次。
for语句正/异常退出
实例如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time # 引用时间模块
for a in range(1,4):
print(a) # 输出 a 的值
time.sleep(1)
else:
print("done")
实例输出:
1
2
3
done
可以看出,for
语句正常执行完毕后会执行 else
中的语句;
下面看一下程序异常退出的情况:
同样运行此程序,在程序未执行完毕的时候,按下 ctrl+c 键退出执行程序,可以看到有个提示:
KeyboardInterrupt
终端会报错,提示程序被中断,同时可以看到 else
中的语句也没有被执行,表明程序异常退出!当在 time.sleep(1) 后附加一条 break
语句时,else
中的语句也不会被执行。
for语句的应用
(1)用for语句迭代遍历字符串(str)、列表(list)、元组(tuple)的元素
方法有以下两种:下面以遍历一个字符串为例,实例如下:
方法一:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
str = "hello world"
for i in str:
print( i )
说明:此方法的执行过程是,直接通过获取每一个元素的值进行遍历的。
方法二:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
str = "hello world"
for i in range( len(str) ):
print(str[i])
分析:此方法的执行过程是通过 len()
函数获得字符串 str 的总长度,并将其作为 range()
的范围,在每次遍历时将其值赋值给变量 i ,然后以 i 的值作为下标值,最终获得该字符串的所有元素。
(2)用 for 语句迭代遍历字典(dic)获得其元素
分析:因为字典是一个无序的序列,所以不能通过下标的形式进行获取中 key 所对应的元素,需要先获取其 key 值,再对 key 进行遍历即可获得对应的键值。方法有以下两种:
方法一:
先遍历出其 key ,具体如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
tup = {'a':'hello', 'b':'world', 11:222}
for x in tup:
print( x ) # 此时获取到的是‘key’的值
实例输出:
a
11
b
可见直接迭代一个字典时,获取到的是该字典的键。在拿到 key 后就好办了,直接通过键就可以取到对应的值了,实例如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
tup = {'a':'hello', 'b':'world', 11:222}
for x in tup:
print(tup[x]) # 通多'key'获取'键值'
运行输出:
hello
222
world
注意:由于字典属于无序的序列,所以在迭代一个字典时,随着字典内数据的变化,其输出的 key 的顺序也随之变化。
方法二:
使用字典中提供的 itmes()
方法:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
tup = {'a':'hello', 'b':'world', 11:222}
print(tup.items() ) #调用 itmes() 方法
运行输出:
[('a', 'hello'), (11, 222), ('b', 'world')]
可以看出,此时返回的是 元组对 的形式,下面通过 for
语句获取其中的元素:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
tup = {'a':'hello', 'b':'world', 11:222}
for k,v in tup.items():
print(k,v) # 并排输出'key'与'key值'
运行输出:
a hello
11 222
b world
分析:执行过程为通过 itmes()
方法将字典数据转化为 元组对 的形式,然后通过for 语句将 key 值赋给变量 k ,将 value 值赋给变量 v ,直至遍历结束!
列表解析表达式(高级用法)
使用列表解析,可以简单高效地处理一个可迭代对象,并生成结果列表。
表达式格式如下:
- 表达式1:迭代序列里所有内容,并计算生成列表
- 表达式2:按条件迭代,并计算生成列表
表达式 expr 使用每次迭代内容 i1 - iN,计算生成一个列表。如果指定了条件表达式 cond_expr ,则只有满足条件的元素参与迭代。
实例演示:
>>> [i**2 for i in range(10)] # 平方值
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [(i,i**2) for i in range(10)] # 序号,平方值
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81)]
>>> [i for i in range(10) if i%2==0] # 取偶数
[0, 2, 4, 6, 8]
>>> [(x, y, x*y) for x in range(1, 4) for y in range(1, 4) if x>=y] # 二重循环
[(1, 1, 1), (2, 1, 2), (2, 2, 4), (3, 1, 3), (3, 2, 6), (3, 3, 9)]
>>>
完整学习教程请访问:Python3 入门教程——目录索引