Python列表推导式:你是否知道它能如此强大?


Python列表推导式:你是否知道它能如此强大?

文章插图

Python/ target=_blank class=infotextkey>Python中的列表推导式是一种非常强大和方便的语法结构,它允许我们在单个语句中创建一个新列表,并使用现有列表的元素来计算新的元素 。本文将深入探讨Python列表推导式的各个方面,包括基础知识、进阶使用技巧以及实际应用场景等 。
 
什么是列表推导式?列表推导式是一种快速创建新列表的方法,它允许您在单个语句中定义一个新列表,并使用现有列表的元素来计算新元素 。列表推导式采用以下语法:
new_list = [expression for item in iterable if condition]其中expression表示要计算的新元素,item表示原始列表中的每个元素,iterable表示原始列表本身,condition是一个可选的条件表达式,用于过滤原始列表中的元素 。例如,下面的代码使用列表推导式创建一个名为new_list的新列表,其中包含原始列表my_list中每个元素的平方:
my_list = [1, 2, 3, 4, 5]new_list = [x * x for x in my_list]print(new_list)# 输出:[1, 4, 9, 16, 25]在此示例中,expression是x * x,item是x,iterable是my_list,因此我们可以将表达式写成x * x 。由于没有条件表达式,因此所有原始列表中的元素都会包含在新列表中 。
基础语法基本用法使用列表推导式创建新列表时,您需要提供三个关键信息:一个表达式、一个迭代器以及一个可选的条件 。这些信息将被组合成一个单独的语句,并通过方括号将其包装起来 。以下是一个简单的例子:
numbers = [1, 2, 3, 4, 5]squares = [num ** 2 for num in numbers]print(numbers)# 输出:[1, 2, 3, 4, 5]print(squares)# 输出:[1, 4, 9, 16, 25]在此示例中,表达式num ** 2计算原始列表中每个元素的平方值 。使用迭代器num遍历原始列表中的每个元素,并将结果存储在名为squares的新列表中 。
条件表达式列表推导式还允许在表达式和迭代器之间添加一个可选的条件表达式,用于过滤原始列表中的元素 。例如,下面的代码使用列表推导式创建一个名为evens的新列表,其中包含原始列表numbers中的所有偶数元素:
numbers = [1, 2, 3, 4, 5]evens = [num for num in numbers if num % 2 == 0]print(numbers)# 输出:[1, 2, 3, 4, 5]print(evens)# 输出:[2, 4]在此示例中,条件表达式if num % 2 == 0用于测试迭代器num是否为偶数 。只有当条件表达式为True时,才将元素添加到新列表中 。
嵌套列表推导式列表推导式还可以嵌套在其他列表推导式中,以便执行更复杂的操作 。例如,下面的代码使用嵌套的列表推导式创建一个名为matrix的新矩阵,其中包含两个维度,并且每个元素都是一个二元组:
matrix = [(x, y) for x in range(3) for y in range(4)]print(matrix)# 输出:[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)] 
在此示例中,我们使用嵌套的两个迭代器x和y来遍历两个维度,并将它们组合成一个二元组(x, y),然后将所有二元组存储在名为matrix的新列表中 。
您还可以在内部循环中添加条件表达式,以进一步过滤结果 。例如,下面的代码使用嵌套的列表推导式创建一个名为evens的新列表,其中包含原始列表numbers中的偶数元素,但只有当相应的第二个维度为偶数时才计算:
numbers = [1, 2, 3, 4, 5]evens = [(x, y) for x in numbers if x % 2 == 0 for y in range(10) if y % 2 == 0]print(evens)# 输出:[(2, 0), (2, 2), (2, 4), (2, 6), (2, 8), (4, 0), (4, 2), (4, 4), (4, 6), (4, 8)]在此示例中,我们将两个迭代器x和y嵌套在一起,并添加了两个条件表达式 。第一个条件表达式if x % 2 == 0用于过滤原始列表中的偶数元素,第二个条件表达式if y % 2 == 0用于确保第二个维度也为偶数 。
进阶技巧处理多个列表列表推导式还可以使用多个列表生成新列表 。例如,下面的代码使用两个原始列表a和b来创建一个名为c的新列表,该列表包含这两个列表中相应元素之和:
a = [1, 2, 3, 4, 5]b = [10, 20, 30, 40, 50]c = [x + y for x, y in zip(a, b)]print(c)# 输出:[11, 22, 33, 44, 55]在此示例中,我们使用内置函数zip()将两个列表打包在一起,并使用元组解包语法(x, y)分别取出相应的元素 。然后,我们使用表达式x + y计算这两个元素之和,并将结果存储在名为c的新列表中 。
处理字符串列表推导式还可以处理字符串,并将其转换为新的列表 。例如,下面的代码使用一个原始字符串来创建一个名为vowels的新列表,其中包含所有元音字母:


推荐阅读