一文掌握 Python 列表推导式中的嵌套逻辑

开发
本文介绍了 Python 列表推导式中的嵌套逻辑,从基本的列表推导式到单层条件过滤,再到嵌套循环和多层嵌套,最后通过一个实战案例展示了如何生成指定范围内的素数列表。

列表推导式是 Python 中一个非常强大的工具,可以让你以简洁的方式创建列表。当你掌握了基本的列表推导式后,下一步就是学习如何在列表推导式中使用嵌套逻辑。本文将逐步引导你从简单的嵌套逻辑到更复杂的多层嵌套,帮助你全面掌握这一技能。

1. 基本的列表推导式

首先,我们回顾一下基本的列表推导式。假设我们要创建一个包含 0 到 9 的平方的列表:

squares = [x**2 for x in range(10)]
print(squares)
# 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这段代码中,[x**2 for x in range(10)] 就是一个列表推导式,它遍历 range(10) 中的每个元素 x,并计算 x**2,最终生成一个列表。

2. 单层条件过滤

在列表推导式中加入条件过滤可以让我们更灵活地控制生成的列表。例如,我们只保留平方数中偶数的部分:

even_squares = [x**2 for x in range(10) if x**2 % 2 == 0]
print(even_squares)
# 输出: [0, 4, 16, 36, 64]

这里,if x**2 % 2 == 0 是一个条件过滤,只有当 x**2 是偶数时,才会将其添加到列表中。

3. 嵌套循环

接下来,我们来看看如何在列表推导式中使用嵌套循环。假设我们有两个列表 a 和 b,我们想创建一个新的列表,包含所有可能的 (x, y) 组合:

a = [1, 2, 3]
b = ['a', 'b', 'c']
combinations = [(x, y) for x in a for y in b]
print(combinations)
# 输出: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]

这里的 [(x, y) for x in a for y in b] 表示先遍历 a 中的每个元素 x,然后对于每个 x,再遍历 b 中的每个元素 y,生成 (x, y) 对。

4. 嵌套条件过滤

在嵌套循环中,我们也可以加入条件过滤。假设我们只想保留 x 和 y 之和为奇数的组合:

a = [1, 2, 3]
b = ['a', 'b', 'c']
filtered_combinations = [(x, y) for x in a for y in b if (x + ord(y)) % 2 != 0]
print(filtered_combinations)
# 输出: [(1, 'a'), (1, 'c'), (2, 'b'), (3, 'a'), (3, 'c')]

这里,if (x + ord(y)) % 2 != 0 是一个条件过滤,只有当 x 和 y 的 ASCII 值之和为奇数时,才会将其添加到列表中。

5. 多层嵌套

在某些情况下,我们可能需要更深层次的嵌套。假设我们有一个二维列表,我们想将其展平成一维列表:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
# 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

这里的 [num for row in matrix for num in row] 表示先遍历 matrix 中的每一行 row,然后对于每一行 row,再遍历其中的每个元素 num,生成一维列表。

6. 嵌套列表推导式

有时候,我们需要在列表推导式中嵌套另一个列表推导式。假设我们有一个列表,每个元素都是一个列表,我们想创建一个新的列表,每个元素是原列表中对应位置的最大值:

lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
max_values = [max(row) for row in lists]
print(max_values)
# 输出: [3, 6, 9]

这里的 [max(row) for row in lists] 表示遍历 lists 中的每一行 row,并计算每行的最大值,生成新的列表。

7. 实战案例:生成素数列表

最后,我们来看一个实际的案例:生成一个指定范围内的所有素数。素数是指只能被 1 和自身整除的自然数。

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

primes = [x for x in range(2, 50) if is_prime(x)]
print(primes)
# 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

这里,is_prime 函数用于判断一个数是否为素数,[x for x in range(2, 50) if is_prime(x)] 表示遍历 2 到 49 之间的每个数 x,如果 x 是素数,则将其添加到列表中。

总结

本文介绍了 Python 列表推导式中的嵌套逻辑,从基本的列表推导式到单层条件过滤,再到嵌套循环和多层嵌套,最后通过一个实战案例展示了如何生成指定范围内的素数列表。

责任编辑:赵宁宁 来源: 手把手PythonAI编程
相关推荐

2024-06-28 09:52:47

列表Python

2024-11-19 09:00:00

Pythondatetime模块

2024-06-21 15:19:40

2022-12-20 07:39:46

2023-12-21 17:11:21

Containerd管理工具命令行

2022-10-21 17:24:34

契约测试定位

2017-11-28 15:20:27

Python语言编程

2021-03-02 09:35:33

Python循环开发

2021-05-12 18:22:36

Linux 内存管理

2024-07-09 08:11:56

2023-10-04 00:02:00

本文将从入门到精通,冒泡排序

2024-05-20 12:00:00

Python列表推导式

2023-10-24 11:44:21

2023-12-15 09:45:21

阻塞接口

2020-10-09 07:56:52

Linux

2023-10-21 20:50:00

Python项目PyCharm

2017-10-18 17:16:59

ZeroHeroPython

2024-02-21 20:43:02

Python列表推导式

2024-11-21 06:00:00

Python列表推导式

2024-05-20 08:30:00

Python编程
点赞
收藏

51CTO技术栈公众号