Python列表推导式秘籍:简洁高效的列表生成方式
发布时间: 2024-06-25 15:38:28 阅读量: 67 订阅数: 38
![Python列表推导式秘籍:简洁高效的列表生成方式](https://img-blog.csdnimg.cn/2020111211112746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW9wZW5nMDF6cA==,size_16,color_FFFFFF,t_70)
# 1. Python列表推导式基础**
列表推导式是一种简洁高效的列表生成方式,它使用一行代码即可创建新的列表。其语法为:`[expression for item in iterable if condition]`,其中:
- `expression`:要生成的元素值。
- `item`:可迭代对象的元素变量。
- `iterable`:可迭代对象,例如列表、元组或范围。
- `condition`(可选):过滤元素的条件表达式。
例如,以下代码使用列表推导式生成一个包含1到10的偶数列表:
```python
even_numbers = [i for i in range(1, 11) if i % 2 == 0]
```
# 2. 列表推导式进阶技巧
### 2.1 条件过滤
#### 2.1.1 使用if语句
条件过滤允许我们在列表推导式中根据特定条件选择元素。我们可以使用`if`语句来实现条件过滤。语法如下:
```python
[element for element in iterable if condition]
```
例如,我们有一个数字列表,我们只想选择大于5的数字:
```python
numbers = [1, 3, 5, 7, 9, 11, 13]
filtered_numbers = [number for number in numbers if number > 5]
print(filtered_numbers) # 输出:[7, 9, 11, 13]
```
#### 2.1.2 使用条件表达式
条件表达式是一种简洁的语法,可以替代`if`语句进行条件过滤。语法如下:
```python
[element for element in iterable if condition else else_value]
```
如果`condition`为真,则选择`element`;否则,选择`else_value`。例如,我们想根据数字的奇偶性对列表进行过滤:
```python
numbers = [1, 3, 5, 7, 9, 11, 13]
filtered_numbers = [number if number % 2 == 0 else -number for number in numbers]
print(filtered_numbers) # 输出:[2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13]
```
### 2.2 嵌套列表推导式
#### 2.2.1 嵌套多层列表推导式
嵌套列表推导式允许我们在一个列表推导式中嵌套另一个列表推导式。这可以用于创建复杂的多维数据结构。语法如下:
```python
[[element for element in iterable] for iterable in iterables]
```
例如,我们有一个列表包含列表,我们想将所有子列表中的元素合并到一个单一的列表中:
```python
list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [element for sublist in list_of_lists for element in sublist]
print(flattened_list) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
```
#### 2.2.2 生成笛卡尔积
笛卡尔积是两个或多个集合中所有元素的组合。我们可以使用嵌套列表推导式来生成笛卡尔积。语法如下:
```python
[product for product in itertools.product(iterable1, iterable2, ..., iterableN)]
```
例如,我们有两个列表,我们想生成它们的笛卡尔积:
```python
import itertools
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
cartesian_product = list(itertools.product(list1, list2))
print(cartesian_product) # 输出:[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
```
**mermaid流程图:**
```mermaid
graph LR
subgraph 条件过滤
if(condition) --> element
else --> else
```
0
0