列表推导式是一种创建列表的简明方式。它类似于数学中的集合构造符号。它用于定义基于现有可迭代对象(如列表、元组或字符串)的列表,并对可迭代对象中的每个元素应用一个表达式。
Python 列表推导式的语法
列表推导式的基本语法如下:
new_list = [expression for item in iterable if condition]
其中,
-
expression
是要对可迭代对象中的每个项应用的操作或转换。
-
-
-
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]
列表推导式与 For 循环
列表推导式和 for 循环都用于迭代,但它们在语法和使用上有所不同。
列表推导式是 Python 中创建列表的快捷方式。它们让你能够通过将一个操作应用到现有列表中的每一项来生成一个新的列表。
另一方面,for 循环是一个控制流语句,用于一次一个地遍历可迭代对象的元素,并为每个元素执行一段代码。
对于简单的操作,通常更喜欢使用列表推导式,而对于复杂的任务,for 循环提供了更多的灵活性。
使用 For 循环的示例
假设我们想将字符串中的每个字母分开,并将所有非元音字母放入一个列表对象中。我们可以通过 for 循环来实现如下:
chars=[]
for ch in 'TutorialsPoint':
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 'TutorialsPoint' 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 的可能性。