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
,表示数字num
的pow
次方。
然而,使用Python中的列表推导可以更轻松地完成这个任务。让我们继续学习其语法。
Python列表推导的语法
列表推导的通用语法如下所示。
= [ for in ]
让我们解析上面的语法。
- 在Python中,列表由一对方括号
[]
括起来,因此您需要将列表推导语句放在[]
内。 in
表示您正在循环遍历一个可迭代对象。任何可以循环遍历并访问单个项的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列表解析示例
#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。