# Python推导式的类型、特点及使用建议

### Python推导式的类型、特点及使用建议

Python 推导式是一种简洁创建序列（列表、字典、集合）或生成器的语法糖，核心是**用一行 / 多行简洁代码实现循环 + 条件判断的逻辑**，大幅简化代码量。以下是分类总结：

### 一、核心类型

#### 1\. 列表推导式

**语法**：`[表达式 for 变量 in 可迭代对象 if 条件]` **作用**：快速生成列表，替代`for+append`的繁琐写法

```python

# 基础：生成1-5的平方
squares = [x**2 for x in range(1,6)]

# 带条件：筛选偶数的平方
even_squares = [x**2 for x in range(1,10) if x%2==0]

# 嵌套循环：展平二维列表
flat = [num for row in [[1,2],[3,4]] for num in row]  # [1,2,3,4]
```

#### 2\. 字典推导式

**语法**：`{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}` **作用**：直接生成字典，替代`for+赋值`

```python

# 基础：数字到平方的映射
square_dict = {x: x**2 for x in range(1,6)}

# 带条件：筛选键为偶数的项
even_dict = {x: x**2 for x in range(1,10) if x%2==0}
```

#### 3\. 集合推导式

**语法**：`{表达式 for 变量 in 可迭代对象 if 条件}` **作用**：生成去重的集合，特性同集合（无序、唯一）

```python

# 基础：生成平方的集合（自动去重）
square_set = {x**2 for x in [-2,-1,0,1,2]}  # {0,1,4}

# 带条件：筛选大于0的平方
pos_set = {x**2 for x in range(-5,5) if x**2 > 0}
```

#### 4\. 生成器推导式

**语法**：`(表达式 for 变量 in 可迭代对象 if 条件)` **作用**：生成惰性迭代器（节省内存），需迭代时才计算值

```python

# 生成器对象（不立即计算）
gen = (x**2 for x in range(1,6))
# 迭代取值
print(list(gen))  # [1,4,9,16,25]
```

### 二、核心特点

1.  **简洁性**：用一行代码替代传统的循环 + 条件 + 追加操作
    
2.  **可读性**：逻辑清晰（表达式→循环→条件），适合简单场景
    
3.  **效率**：底层优化，比手动循环更快
    
4.  **灵活性**：支持嵌套循环、多条件判断
    

### 三、使用建议

*   **适合场景**：简单的序列生成（如筛选、转换）
    
*   **避免场景**：逻辑过于复杂（嵌套多层 / 多条件），否则可读性下降（建议改用普通循环）
    

推导式的核心是 “用简洁语法实现循环逻辑”，根据需求选择对应类型即可
