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>
计算的输出。
这听起来很简单,是吗?
本质上,您想为列表中的所有项目(或任何可迭代项目)做一些事情以获得一个新的列表。
使用它,我们可以简化语法,如下图所示。

现在您已经学习了语法,是时候开始编码了。 您可以使用 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_arr
和b_arr
,其中包含 4 个矩形的长度和宽度。

您需要创建一个包含这 4 个矩形区域的新列表area
。 请记住, area = length * breadth
。
l_arr = [4,5,1,3] b_arr = [2,1,7,9]
您需要两个列表( l_arr
和b_arr
)中的元素才能计算面积。 你可以使用 Python 的zip()
函数来实现。
注意:在 Python 中,
zip()
函数接受一个或多个迭代作为参数,语法为zip(*iterables)
。 然后它返回一个元组迭代器,其中元组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) # Output [8,5,7,27]
在下一节中,您将学习如何在列表推导式中使用条件语句。
使用条件语法的 Python 列表理解
让我们从前面的列表理解语法开始。
这是语法:
<new_list> = [<expression> for <item> in <iterable> if <condition>]
您不想为所有项目计算<expression>
,而只想对满足特定<condition>
的那些项目执行此操作 - where, condition := True
。 这导致了一个简化的语法,如下所示:

有了这个,让我们继续代码示例。
带有条件示例的 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 中处理文件。