Python - 列表推导式
Python 中的列表推导式
列表推导式 是一种简洁的方式来创建列表。它类似于数学中的集合构建记号。它用于基于现有的可迭代对象(如列表、元组或字符串)定义列表,并对可迭代对象中的每个元素应用一个表达式。
Python 列表推导式的语法
列表推导式的基本语法如下 −
new_list = [expression for item in iterable if condition]
其中,
- expression 是应用于可迭代对象中每个元素的操作或转换。
- item 是代表可迭代对象中每个元素的变量。
- iterable 是要迭代的元素序列。
- condition (可选) 是一个基于指定条件过滤元素的表达式。
Python 列表推导式的示例
假设我们想将字符串 "hello world" 中的所有字母转换为大写形式。使用列表推导式,我们遍历每个字符,检查它是否为字母,如果是,则将其转换为大写,从而得到一个大写字母列表 −
string = "hello world" uppercase_letters = [char.upper() for char in string if char.isalpha()] print(uppercase_letters)
得到的结果显示如下 −
['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']
列表推导式与 Lambda
在 Python 中,lambda 是一个用于创建匿名函数的关键字。匿名函数是指没有名称定义的函数。这些函数使用 lambda 关键字后跟逗号分隔的参数列表,然后是一个冒号 :,以及要评估的表达式来创建。
我们可以通过在推导式中对可迭代对象的每个元素应用 lambda 函数来将列表推导式与 lambda 结合使用,从而生成一个新列表。
示例
在以下示例中,我们使用列表推导式结合 lambda 函数,将给定列表 "original_list" 中的每个元素加倍。我们遍历 "original_list" 中的每个元素,并应用 lambda 函数将其加倍 −
original_list = [1, 2, 3, 4, 5] doubled_list = [(lambda x: x * 2)(x) for x in original_list] print(doubled_list)
以上代码的输出如下 −
[2, 4, 6, 8, 10]
Python 列表推导式中的嵌套循环
Python 中的嵌套循环是一个循环嵌套在另一个循环内部,对于外部循环的每次迭代,内部循环会执行多次。
我们可以通过将一个循环置于另一个循环内部来在列表推导式中使用嵌套循环,从而从多次迭代中简洁地创建列表。
示例
在这个示例中,两个列表中所有项目的组合以元组形式添加到第三个列表对象中 −
list1=[1,2,3] list2=[4,5,6] CombLst=[(x,y) for x in list1 for y in list2] print (CombLst)
它将产生以下输出 −
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Python 列表推导式中的条件语句
Python 中的条件语句指的是使用 "if"、"elif" 和 "else" 等语句根据某些条件控制代码流程。它们允许您根据条件评估为 "True" 或 "False" 来执行不同的代码块。
我们可以通过在循环之前将条件语句包含在可迭代对象之后来在列表推导式中使用条件语句,从而在生成列表的同时根据指定条件从可迭代对象中过滤元素。
示例
以下示例在列表推导式中使用条件语句生成 1 到 20 的偶数列表 −
list1=[x for x in range(1,21) if x%2==0] print (list1)
我们得到以下输出 −
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
列表推导式 vs For 循环
列表推导式和 for 循环都用于迭代,但它们在语法和用法上有所不同。
列表推导式是 Python 中创建列表的快捷方式。它们允许您通过对现有列表中的每个项目应用操作来生成一个新列表。
另一方面,for 循环是一种控制流语句,用于逐一迭代可迭代对象中的元素,为每个元素执行一段代码块。
列表推导式通常更适合简单操作,而 for 循环为复杂任务提供了更大的灵活性。
使用 For 循环的示例
假设我们想将字符串中的每个字母分开,并将所有非元音字母放入一个列表对象中。我们可以使用以下 for 循环来实现 −
chars=[]
for ch in 'Tutorials Point':
if ch not in 'aeiou':
chars.append(ch)
print (chars)
chars 列表对象显示如下 −
['T', 't', 'r', 'l', 's', 'P', 'n', 't']
使用列表推导式的示例
我们可以使用列表推导式技术轻松获得相同的结果。列表推导式的一般用法如下 −
listObj = [x for x in iterable]
应用此方法,chars 列表可以通过以下语句构建 −
chars = [ char for char in 'Tutorials Point' if char not in 'aeiou'] print (chars)
chars 列表将如前所示显示 −
['T', 't', 'r', 'l', 's', 'P', 'n', 't']
示例
以下示例使用列表推导式构建 1 到 10 之间数字的平方列表 −
squares = [x*x for x in range(1,11)] print (squares)
squares 列表对象为 −
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表推导式的优势
使用列表推导式的优势如下 −
简洁性 − 与传统的 for 循环相比,列表推导式更简洁且易读,允许您用更少的代码创建列表。
效率 − 列表推导式通常比 for 循环更快、更高效,因为它们由 Python 解释器内部进行了优化。
清晰性 − 列表推导式产生更清晰、更具表现力的代码,使理解所执行操作的目的和逻辑更容易。
减少错误几率 − 由于列表推导式更紧凑,与传统 for 循环相比,出现错误的机会更少,从而降低了代码中 bug 的可能性。