# python3小白课:for表达式 ### for表达式基本使用 for表达式通常用于使用区间、元组、列表等可迭代对象来创建新的列表,在实战中的某些场景偶尔会用到,如果掌握比较困难,也可以不学这个。for表达式的语法如下: ```python [表达式 for 循环变量 in 可迭代对象] ``` for表达式只有一行,跟一般的循环结构是有点区别的,我们对比一下,它将表达式放到了for的前面,表达式部分就是我们之前讲for-in循环时的执行体部分,然后我们还注意到,外面增加了一个`[]`,表示将生成的结果生成一个列表来包裹起来,最终返回一个列表,所以有时候我们也称之为列表推导式。 我们来看个小例子: ```python # coding:utf-8 a = range(5) # 我们来获取一下a这个列表每个元素的平方的新列表 b = [x * x for x in a] print(b) # 我们还能添加if条件在后面,满足条件元素为偶数的才计算 b = [x * x for x in a if x % 2 == 0] print(b) ``` > [!question] > > 有的同学会想,如果我们将表达式的`[]`换成`()`是否可以呢?将列表换成元组,会生成一个元组吗? 我们来看一下。 ```python # coding:utf-8 a = range(5) b = (x * x for x in a) print(b) print(type(b)) ``` 我们会发现,返回的是一个`generator`对象,这个对象是一个生成器,是可以迭代的,我们可以使用for-in循环迭代。 ```python # coding:utf-8 a = range(5) b = (x * x for x in a) for i in b: print(i) ``` --- ### for表达式支持嵌套 for表达式也支持嵌套,两层或者三层的循环嵌套也是可以的,当然如果有if条件的需要也可以加上。 ```python # coding:utf-8 # 我们拿稍微简单一点的两层循环嵌套来说明写法 a = [(x, y) for x in range(5) for y in range(3) if x > y] print(a) # 上述写法跟这样的写法是一样的: a = [] for x in range(5): for y in range(3): if x > y: a.append((x, y)) print(a) ``` 看,是不是方便许多? --- ### zip压缩函数 这里我们小小的介绍一个有用的函数zip压缩函数。它可不是我们日常理解的一种压缩文件命令,而是可以将几个列表压缩成一个zip对象(可迭代对象),这样可以使用循环来并行遍历两个列表了。 我们来看个小小的例子: ```python # coding:utf-8 a = ['a', 'b', 'c'] b = [4, 5, 6] c = [x for x in zip(a, b)] print(c) ``` 可以看到,我们将两个列表压缩成了多个元组组合,最后再生成个列表,就是一个列表了。 如果两个列表成员数不一致会怎么样呢? ```python # coding:utf-8 a = ['a', 'b', 'c'] b = [4, 5] c = [x for x in zip(a, b)] print(c) ``` 可以看到效果是以短的列表为准来进行压缩。 这个函数大家知道一下即可。 ### 单词释义 | 单词 | 释义 | | ---- | ---- | | zip | 压缩 |