python3xiaobaike_2020/chapter4/4-4 python3小白课:for表达式.md
2025-04-20 23:22:14 +08:00

112 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 压缩 |