Python编程:列表推导式的五大高效用法

Python 列表推导式是一种简洁且强大的创建列表的方法。它允许你在一行代码中完成复杂的操作,提高代码的可读性和效率。本文将详细介绍 Python 列表推导式的五大高效用法,并通过实际代码示例帮助你更好地理解和应用这些技术。

1. 基本列表推导式

列表推导式的基本形式是 [expression for item in iterable]。它用于从一个可迭代对象(如列表、元组、字符串等)生成新的列表。

示例 1:从一个列表生成一个新的列表

# 原始列表
numbers = [1, 2, 3, 4, 5]

# 使用列表推导式生成一个新的列表,每个元素乘以2
doubled_numbers = [num * 2 for num in numbers]

print(doubled_numbers)  # 输出: [2, 4, 6, 8, 10]

解释:这里的 num * 2 是表达式,for num in numbers 是循环部分。列表推导式会遍历 numbers 中的每个元素,并将每个元素乘以2,最终生成一个新的列表 doubled_numbers

2. 条件过滤

列表推导式不仅可以包含表达式,还可以包含条件语句,用于过滤不符合条件的元素。

示例 2:生成一个只包含偶数的新列表

# 原始列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用列表推导式生成一个新的列表,只包含偶数
even_numbers = [num for num in numbers if num % 2 == 0]

print(even_numbers)  # 输出: [2, 4, 6, 8, 10]

解释:这里的 if num % 2 == 0 是条件部分。只有当 num 是偶数时,才会被添加到新列表 even_numbers 中。

3. 多重循环

列表推导式可以包含多个循环,用于处理嵌套的可迭代对象。

示例 3:生成一个包含所有组合的新列表

# 两个列表
list1 = [1, 2, 3]
list2 = ['a', 'b']

# 使用列表推导式生成一个包含所有组合的新列表
combinations = [(x, y) for x in list1 for y in list2]

print(combinations)  # 输出: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]

解释:这里有两个循环 for x in list1 和 for y in list2。列表推导式会遍历 list1 中的每个元素 x,然后遍历 list2 中的每个元素 y,生成一个元组 (x, y) 并添加到新列表 combinations 中。

4. 嵌套列表推导式

列表推导式可以嵌套在另一个列表推导式中,用于处理更复杂的数据结构。

示例 4:生成一个二维列表的转置

# 二维列表
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 使用嵌套列表推导式生成矩阵的转置
transposed_matrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]

print(transposed_matrix)  # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

解释:外层列表推导式 [[row[i] for row in matrix] for i in range(len(matrix[0]))] 用于生成新的行,内层列表推导式 [row[i] for row in matrix] 用于生成每一列。最终生成的 transposed_matrix 是原矩阵的转置。

5. 复杂表达式

列表推导式中的表达式可以非常复杂,包括函数调用、条件表达式等。

示例 5:生成一个包含平方根的新列表

import math

# 原始列表
numbers = [1, 4, 9, 16, 25]

# 使用列表推导式生成一个新的列表,每个元素取平方根
sqrt_numbers = [math.sqrt(num) for num in numbers]

print(sqrt_numbers)  # 输出: [1.0, 2.0, 3.0, 4.0, 5.0]

解释:这里的 math.sqrt(num) 是一个函数调用,用于计算每个元素的平方根。列表推导式会遍历 numbers 中的每个元素,并计算其平方根,最终生成一个新的列表 sqrt_numbers

实战案例:生成斐波那契数列

假设我们需要生成前10个斐波那契数列的元素。我们可以使用列表推导式来实现这个任务。

# 生成前10个斐波那契数列的元素
fibonacci = [0, 1] + [fibonacci[i-1] + fibonacci[i-2] for i in range(2, 10)]

print(fibonacci)  # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

解释:首先,我们初始化前两个斐波那契数 0 和 1。然后,使用列表推导式 [fibonacci[i-1] + fibonacci[i-2] for i in range(2, 10)] 生成剩余的斐波那契数。最终生成的 fibonacci 列表包含了前10个斐波那契数列的元素。

总结

本文介绍了 Python 列表推导式的五大高效用法,包括基本列表推导式、条件过滤、多重循环、嵌套列表推导式和复杂表达式。通过实际代码示例,我们展示了如何在不同的场景下使用列表推导式来简化代码并提高效率。

来源: PythonAI与机器学习

THE END