Python 中的列表理解 – 示例

已发表: 2022-02-18

在 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) # Output [8, 27, 125, 343]

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

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

注意:在 Python 中,求幂运算符**与以下语法一起使用: num**pow — 将数字num提升为pow的幂。

但是,您可以使用 Python 中的列表推导更轻松地做到这一点。 让我们继续学习它的语法。

Python 列表理解语法

列表理解的一般语法如下所示。

 <new_list> = [<expression> for <item> in <iterable>]

让我们解析一下上面的语法。

  • 在 Python 中,列表由一对方括号[]分隔——因此您需要将列表理解语句括在[]中。
  • < <iterable>中的<item>表示您正在循环遍历一个可迭代对象。 任何可以循环访问和访问单个项目的 Python 对象(例如列表、元组和字符串)都是可迭代的。
  • <expression>是您要为<iterable>中的每个<item>计算的输出。

这听起来很简单,是吗?

本质上,您想为列表中的所有项目(或任何可迭代项目)一些事情以获得一个新的列表

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

列表理解语法
Python 列表理解语法(作者提供的图片)

现在您已经学习了语法,是时候开始编码了。 您可以使用 Geekflare 的在线 Python IDE 来学习这些示例。 或者您可以在本地计算机上运行它们。

Python 列表理解示例

在上一节中,您从nums创建了一个新列表num_cubes 。 让我们从使用列表推导重写它开始。

对数字使用列表理解

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

  • <do-this> :在这里,您必须对每个num进行立方。 所以用num**3替换<do-this>
  • <all-items> :循环变量是num — 列表中的各个数字。
  • <this-list> :我们现有的列表是nums
  • [num**3 for num in nums]是最终表达式。

综上所述,我们有以下代码片段:

 num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]

恭喜,你已经编写了你的​​第一个列表理解。

继续,让我们使用 Python 字符串。

对字符串使用列表理解

假设你有authors列表——你可以用你最喜欢的作者重写下面的列表。

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

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

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

所以这就是你需要做的所有事情:

  • 遍历authors列表和列表中的每个author
  • 调用author.title()以获取字符串的标题大小写副本。

Python 代码如下所示:

 authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

在上面的输出中,观察所有作者的姓名在标题大小写中的格式——这正是我们想要的。

对多个列表使用列表理解

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

例如,考虑这个问题:您有两个列表l_arrb_arr ,其中包含 4 个矩形的长度和宽度。

您需要创建一个包含这 4 个矩形区域的新列表area 。 请记住, area = length * breadth

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

您需要两个列表( l_arrb_arr )中的元素才能计算面积。 你可以使用 Python 的zip()函数来实现。

注意:在 Python 中, zip()函数接受一个或多个迭代作为参数,语法为zip(*iterables) 。 然后它返回一个元组迭代器,其中元组i包含来自每个可迭代对象的元素i

下图详细描述了这一点。 您在l_arrb_arr中有 4 个值,因此索引的范围是从 0 到 3。如您所见,元组0包含l_arr[0]b_arr[0] ,元组1包含l_arr[1]b_arr[1]等。

python-zip-函数
Python zip() 函数(作者提供的图片)

因此,您可以循环zip(l_arr,b_arr)如下所示:

 area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]

在下一节中,您将学习如何在列表推导式中使用条件语句。

使用条件语法的 Python 列表理解

让我们从前面的列表理解语法开始。

这是语法:

 <new_list> = [<expression> for <item> in <iterable> if <condition>]

您不想为所有项目计算<expression> ,而只想对满足特定<condition>的那些项目执行此操作 - where, condition := True 。 这导致了一个简化的语法,如下所示:

列表理解与条件语法
使用条件语法的 Python 列表理解(作者提供的图片)

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

带有条件示例的 Python 列表理解

#1。 你得到了字符串“I'm learning Python in 2022” 。 您想获得此字符串中所有数字的列表。 你是怎么做到的?

在 Python 中, <char>.isdigit()作用于字符<char> ,如果它是数字 (0-9),则返回True ; 否则它返回False

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

 str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']

在上面的代码中:

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

让我们再举一个例子。

#2。 你有一份水果清单。 并且您想创建一个列表starts_with_b ,其中包含fruits列表中以b开头的所有水果。 您可以使用startswith()方法来编写条件。

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

 fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']

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

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

结论

我希望本教程能帮助你理解 Python 中的列表推导式。

让我们总结一下:

  • 您可以使用[<do this> for <all-items> in <this-list>]使用列表推导式创建一个新列表。
  • 此外,您可以将语法[<do this> for <all-items> in <this-list> if <condition-is-True>]if条件语句一起使用。

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

您现在可以了解如何将列表转换为字典或学习如何在 Python 中处理文件。