前言

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 ,直至遍历结束!

列表解析表达式(高级用法)

使用列表解析,可以简单高效地处理一个可迭代对象,并生成结果列表。

表达式格式如下:

for_expression

  • 表达式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 入门教程——目录索引

最后修改:2022 年 06 月 09 日
如果觉得我的文章对你有用,请随意赞赏