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

文摘   2024-11-27 06:32   上海  

列表推导式是 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(10if x**2 % 2 == 0]
print(even_squares)
# 输出: [0, 4, 16, 36, 64]

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

3. 嵌套循环

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

a = [123]
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. 嵌套条件过滤

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

a = [123]
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 是一个条件过滤,只有当 xy 的 ASCII 值之和为奇数时,才会将其添加到列表中。

5. 多层嵌套

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

matrix = [[123], [456], [789]]
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 = [[123], [456], [789]]
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(250if 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 列表推导式中的嵌套逻辑,从基本的列表推导式到单层条件过滤,再到嵌套循环和多层嵌套,最后通过一个实战案例展示了如何生成指定范围内的素数列表。

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!

付费合集推荐

Python编程基础

Python办公自动化-Excel

微信公众号批量上传发布系统

文末福利

公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。

推广服务

公众号推广代运营代发服务

关注我👇,精彩不再错过


手把手PythonAI编程
分享与人工智能和python编程语言相关的笔记和项目经历。
 最新文章