Python列表生成器详解:掌握生成器表达式和列表推导,写出优雅高效的代码
发布时间: 2024-06-19 10:02:01 阅读量: 98 订阅数: 39
![python列表简单代码](https://img-blog.csdnimg.cn/e921416aa1f3436394b88b5f8443ea9d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rWL6K-V5byA5Y-R5bCP5bCGY2hlbg==,size_20,color_FFFFFF,t_70,g_se,x_16)
# 1. Python列表生成器概述
Python列表生成器是一种强大的工具,用于创建列表。它提供了一种简洁且高效的方式来生成一系列元素,而无需使用显式循环。列表生成器有两种主要类型:生成器表达式和列表推导。
生成器表达式使用圆括号 `()`,而列表推导使用方括号 `[]`。生成器表达式返回一个生成器对象,它是一个惰性求值的迭代器。列表推导返回一个列表,它是一个立即求值的集合。
# 2. 生成器表达式的语法和用法
### 2.1 生成器表达式的基本语法
#### 2.1.1 生成器表达式的结构
生成器表达式是一种简洁的语法,用于创建生成器对象。其基本语法如下:
```python
(expression for item in iterable if condition)
```
其中:
- `expression`:要生成的元素。
- `item`:迭代器中的元素。
- `iterable`:要遍历的序列。
- `condition`:可选的过滤条件,仅生成满足条件的元素。
#### 2.1.2 生成器表达式的元素
生成器表达式由以下元素组成:
- **圆括号**:将生成器表达式括起来。
- **表达式**:指定要生成的元素。
- **for 子句**:指定要遍历的序列。
- **if 子句**:可选,指定过滤条件。
### 2.2 生成器表达式的进阶用法
#### 2.2.1 过滤条件和映射
生成器表达式可以使用 `if` 子句来过滤元素,并使用映射操作来修改元素。例如:
```python
# 过滤出偶数
even_numbers = (num for num in range(10) if num % 2 == 0)
# 将每个元素乘以 2
doubled_numbers = (num * 2 for num in range(10))
```
#### 2.2.2 嵌套生成器表达式
生成器表达式可以嵌套使用,以创建更复杂的生成器。例如:
```python
# 创建一个包含每个数字的平方和立方的元组的生成器
squared_and_cubed = ((num, num**2, num**3) for num in range(10))
```
**代码块:**
```python
# 过滤出偶数
even_numbers = (num for num in range(10) if num % 2 == 0)
# 打印偶数列表
print(list(even_numbers))
```
**逻辑分析:**
这段代码使用生成器表达式创建了一个包含偶数的生成器。`for` 子句遍历范围 `range(10)` 中的
0
0