• 在for关键字之前需要定义一个表达式,该表达式通常会包含循环计数器;
  • for表达式没有循环体,因此不需要冒号;


for表达式当然也是有循环的,它同样会对可迭代对象进行循环,这一点与普通的for循环没什么两样。for表达式最终返回的是列表,因此for表达式也被称为列表推导式。 下面的代码演示了如何用for表达式创建列表: 示例代码:for_expr1.py

num_range = range(10)# 对num_range执行for表达式num_list1 = (x + x for x in num_range)   # 生成一个生成器num_list2 = [x + x for x in num_range]   for num in num_list1:    print(num)# num_range集合包含10个元素print(num_list2)


这段代码的执行结果如下:

024681012141618[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


上面的代码会对 num_range执行选代,由于 num_range相当于包含10个元素的可迭代对象,因此程序生成的 num_list1和num_list2同样包含10个元素,每个元素都是 num_range中每个元素的2倍(由表达式x+x控制)。 如果将for表达式的方括号改为圆括号,for表达式将不再生成列表,而是生成一个生成器( generator),该生成器不能直接输出相应的值,但可以使用for循环迭代。 还可以在for表达式后面添加if条件,这样for表达式将只迭代那些符合条件的元素。代码如下: 示例代码:for_expr2.py

num_range = range(10)num_list = [x + x for x in num_range if x % 2 == 1]# a_list集合包含10个元素print(num_list)


上面的代码代码与前面的代码大致相同,只是为for表达式增加了if条件,这样程序只处理 num_range区间的奇数,因此程序生成的列表中只包含5个元素。 执行这段代码,可以看到如下输出结果

[2, 6, 10, 14, 18]


在前面看到的for表达式都是单层循环,实际上for表达式也可以是嵌套循环,代码如下: 示例代码:for_expr3.py

num_list = [(x, y) for x in range(5) for y in range(4)]# num_list列表包含20个元素print(num_list)last_list = []for x in range(5):    for y in range(4):        last_list.append((x, y))print(last_list)


上面代码中x是遍历 range(5)的计数器,因此x可迭代5次(0到4);y是遍历 range(4)的计数器,因此该y可选代4次(0到3)。所以(x,y)表达式一共会迭代20次。 运行这段代码,可以看到如下输出结果

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)][(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]


上面的for表达式相当于如下嵌套循环

last_list=[]for x in range(5):    for y in range(4):        last_list.append((x, y))print(last_list)


当然,for表达式也支持3层或更多层嵌套,例如如下代码是3层嵌套:

num_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(8)]print(num_list)


num_list列表共包含160个元素。 对于嵌套循环的for表达式,同样可指定if条件。假如我们有一个需求:程序要将两个列表中的数值按“能否整除”的关系配对在一起。比如num_list1列表中包含30,num_list2列表中包含6,其中30可以整除6,这样就可以将30和5配对在一起。对于上面的需求使用for表达式来实现非常简单,代码如下:

num_list1 = [30, 12, 77, 34, 39, 78, 36, 36, 121]num_list2 = [3, 6, 7, 12]# 只要y能整除x,就将它们配对在一起result = [(x, y) for x in num_list2 for y in num_list1 if y % x == 0]print(result)


运行这段代码,会输出如下结果:

[(3, 30), (3, 12), (3, 39), (3, 78), (3, 36), (3, 36), (6, 30), (6, 12), (6, 78), (6, 36), (6, 36), (7, 77), (12, 12), (12, 36), (12, 36)]