Python中的列表推导式 – 附带示例

在Python中,列表推导可以帮助您从现有的可迭代对象(如列表、字符串和元组)创建新的列表。

它们简洁的语法使您可以仅用一行代码创建新的列表。本教程将教您如何做到这一点。

在接下来的几分钟内,您将学到:

  • 如何使用for循环创建新列表,
  • 在Python中使用列表推导的语法,以及
  • 如何使用if条件语句修改列表推导。

此外,您还将编写几个示例代码,以帮助您更好地理解列表推导。

让我们开始吧。🌊

如何使用for循环创建Python列表

假设您有一个数字列表nums。您想创建另一个列表,其中包含nums中所有数字的立方。以下是使用Python中的for循环完成此操作的方法:

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# 输出
[8, 27, 125, 343]

在上面的代码中,我们有以下步骤:

  • 初始化一个空列表num_cubes
  • 循环遍历nums列表。
  • 获取每个数字num,并使用指数运算符计算其立方:num**3
  • 最后,将立方值添加到列表num_cubes中。

注意:在Python中,指数运算符**的语法是:num**pow,表示数字numpow次方。

然而,使用Python中的列表推导可以更轻松地完成这个任务。让我们继续学习其语法。

Python列表推导的语法

列表推导的通用语法如下所示。

 = [ for  in ]

让我们解析上面的语法。

  • 在Python中,列表由一对方括号[]括起来,因此您需要将列表推导语句放在[]内。
  • in 表示您正在循环遍历一个可迭代对象。任何可以循环遍历并访问单个项的Python对象,如列表、元组和字符串都是可迭代对象。
  • 是您想要为每个中计算的输出。

听起来简单,是吗?

实质上,您想要为列表(或任何可迭代对象)中的所有项执行某个操作,以获取一个新的列表。

使用这个语法,我们可以简化语法,如下图所示。

Python列表推导的语法(由作者创建的图像)

现在您已经学会了语法,是时候开始编写代码了。您可以使用Geekflare’s online Python IDE来跟随这些示例。或者您可以在本地机器上运行它们。

Python列表推导示例

在前面的部分中,您从nums创建了一个新的列表num_cubes。让我们先重写一下,使用列表推导。

使用数字的列表推导

现在,让我们使用简化的语法如下:

  • :在这里,您需要对每个num进行立方。所以将替换为num**3
  • :循环变量是num,即列表中的每个数字。
  • :我们已经有的列表是nums
  • [num**3 for num in nums]是最终的表达式。✅

将所有内容放在一起,我们有以下代码片段:

num_cubes = [num**3 for num in nums] print(num_cubes)

# 输出
[8, 27, 125, 343] 恭喜,你成功编写了第一个列表推导式。🎉

接下来,让我们来处理Python字符串。

使用列表推导式处理字符串

假设你有一个名为authors的列表 – 你可以用你喜欢的作者来重写下面的列表。😄

注意上面的列表中作者的名字都是小写的。我们现在想将它们格式化为标题格式,并将它们存储在一个名为author_list的新列表中。

注意:在Python中,字符串方法title()接受一个字符串作为参数,并返回一个格式化为标题格式的字符串副本。也就是说,每个单词的第一个字母都大写:First-name Last-name

所以你需要做的就是:

遍历authors列表,对于列表中的每个作者,
调用author.title()以获取字符串的标题格式副本。

以下是这个Python代码的示例:

authors = [“jane austen”,”george orwell”,”james clear”,”cal newport”]

author_list = [author.title() for author in authors] print(author_list)

# 输出
[‘Jane Austen', ‘George Orwell', ‘James Clear', ‘Cal Newport'] 在上面的输出中,观察所有作者的名字都已经以标题格式进行了格式化 – 这就是我们想要的。

使用多个列表的列表推导式

到目前为止,你已经学会了如何使用列表推导式从一个现有列表创建新列表。现在让我们学习如何从多个列表创建一个新列表。

例如,考虑以下问题:你有两个列表l_arr和b_arr,其中包含了4个矩形的长度和宽度。

你需要创建一个名为area的新列表,其中包含了这4个矩形的面积。记住,area = length * breadth。

l_arr = [4,5,1,3] b_arr = [2,1,7,9]

为了计算面积,你需要来自l_arr和b_arr两个列表的元素。你可以使用Python的zip()函数来实现。

注意:在Python中,zip()函数接受一个或多个可迭代对象作为参数,并返回一个元组的迭代器,其中元组i包含每个可迭代对象的元素i。

下图详细描述了这一过程。你在l_arr和b_arr中有4个值,所以索引的范围是从0到3。如你所见,元组0包含l_arr[0]和b_arr[0],元组1包含l_arr[1]和b_arr[1],依此类推。

因此,你可以通过遍历zip(l_arr,b_arr)来实现:

area = [l*b for l,b in zip(l_arr,b_arr)] print(area)

# 输出
[8,5,7,27] 在下一节中,你将学习如何在列表推导式中使用条件语句。

Python列表推导式的条件语法

让我们从前面的列表推导式的语法开始。

以下是语法:

new_list = [expression for item in iterable if condition]

而不是针对所有项目计算,您只想针对满足特定的项目执行此操作 – 其中condition := True。这导致了简化的语法,如下所示:

带条件语法的Python列表解析(作者提供的图像)

▶有了这个,让我们继续看代码示例。

带条件的Python列表解析示例

#1.您有一个字符串“I'm learning Python in 2022”。您希望获取此字符串中所有数字的列表。那么你该如何做呢?

在Python中,.isdigit()作用于字符并在它是数字(0-9)时返回True;否则返回False

下面的代码片段显示了如何收集字符串str1中所有数字的列表。

str1 = "I'm learning Python3 in 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# 输出
['3', '2', '0', '2', '2']

在上面的代码中:

  • 您循环遍历字符串str1
  • 访问每个char以检查它是否是数字,使用isdigit()方法,并且
  • 仅当它是数字时,才将char添加到新列表digits中。

再来看一个例子。

#2. 您有一个水果列表。🍊 您想创建一个名为starts_with_b的列表,其中包含从fruits列表中以b开头的所有水果。您可以使用startswith()方法编写条件。

.startswith('char')返回True,如果以'char'开头;否则返回False

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# 输出
['blueberry', 'banana']

在上面的输出中,我们获得了'blueberry''banana',这是我们在fruits列表中以'b'开头的两种水果,正如我们所期望的。

这就结束了我们关于列表解析的讨论。

结论

希望本教程对您理解Python中的列表解析有所帮助。

让我们总结一下:

  • 您可以使用[ for in ]使用列表解析创建一个新列表。
  • 此外,您可以使用语法[ for in if ]if条件语句。

此外,您还编写了几个示例。作为下一步,您可以尝试使用列表解析重写一些现有的Python循环以创建列表。愉快的编码!直到下一个教程。😄

您现在可以查看如何convert a list to a dictionary或学习how to handle files in Python

类似文章