详解Python中超级好用的三种解析式(含代码)

来源:投稿 作者:Fairy
编辑:学姐

Python中的解析式(comprehension)是一种简单的语法结构,它可以从可迭代对象中生成新的序列、集合或字典。其中最常见的三种解析式分别是列表解析式、字典解析式和集合解析式。这种方式可以让我们用更简单、更易读的语法快速地生成数据结构,提高代码效率。

列表解析式

列表解析式通常用于从一个可迭代对象(例如列表、元组等)中快速创建一个新的列表。它的语法与for循环类似,可以带有条件语句。使用列表解析式能够让我们更加简洁地表达对可迭代对象的操作,同时提高代码的可读性和效率。

1. 基本形式

new_list = [expression for item in iterable]
  • expression为每个元素要执行的操作,可以是任何有效的 Python 表达式。

  • item 是从可迭代对象中依次读取的每个元素。

  • iterable 是被迭代的对象。

下面我们来看一个例子:

new_list = [x for x in range(10)]
print(new_list)

这段代码的含义是使用列表解析式生成一个包含0到9的整数列表,并将其赋值给new_list变量。其中,range(10)返回一个包含0到9的整数序列,for x in range(10)表示遍历序列中的每个整数,并将其赋值给变量x。在列表解析式的中括号内,我们可以指定对每个x所执行的操作,本例中只是简单地将x放入新列表中。最终,打印输出new_list。

2. 带if条件

new_list = [expression for item in iterable if condition]
  • expression为每个元素要执行的操作,可以是任何有效的 Python 表达式。

  • item 是从可迭代对象中依次读取的每个元素。

  • iterable 是被迭代的对象。

  • condition 是可选的,如果提供,则是对元素进行过滤的条件。

下面我们来看一个例子:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_list = [x for x in my_list if x % 2 == 0]
print(new_list) 

这段代码的含义是通过列表解析式从一个给定的列表my_list中生成一个新的列表new_list,新列表包含my_list中所有偶数元素。

在列表解析式的中括号内,我们首先使用for循环语句遍历my_list中的每个元素,并将其赋值给变量x。if语句,我们可以限制将哪些元素添加到新列表中。这个案例中,if语句指定只有当x是偶数时才将其添加到新列表new_list中。

3. 嵌套循环

new_list = [expression for item1 in iterable1 for item2 in iterable2]
  • expression为每个元素要执行的操作,可以是任何有效的 Python 表达式。

  • item 是从可迭代对象中依次读取的每个元素。

  • iterable 是被迭代的对象。

下面我们来看一个例子:

new_list = [(x, y) for x in range(3) for y in range(3)]
print(new_list)

这段代码的含义是通过使用嵌套的两个for循环语句,生成了一个新列表new_list。该列表包含了由所有x和y组成的元组。

具体来说,这个列表解析式首先使用第一个for循环语句遍历range(3)产生的整数序列(即0, 1, 2),将每一个值依次赋予变量x,然后再使用第二个for循环语句再次遍历相同的整数序列,将每一个值依次赋予变量y。在for循环中,两个变量x和y组成了一个元组(x, y),并将这个元组添加到一个新列表new_list中。

字典解析式

字典解析式用于从一个可迭代对象中创建一个新的字典。它使用与列表解析式相似的语法,但使用键值对表示。

new_dict = {key_expression: value_expression for item in iterable if condition}
  • key_expression 和 value_expression 分别是由 item 元素产生的键和值。

  • item 是从可迭代对象中依次读取的每个元素。

  • iterable 是被迭代的对象。

  • condition 是可选的,如果提供,则对元素进行过滤的条件。

下面我们来看一个例子:

my_list = [1, 2, 3, 4, 5]
new_dict = {x: x**2 for x in my_list}
print(new_dict) 

这段代码的含义是通过使用字典解析式从给定列表my_list中生成一个新的字典new_dict,其中字典的键是my_list中的每个元素x,而对应的值是该元素的平方。

具体来说,我们使用for循环语句遍历my_list中的每个元素,并将其赋值给变量x。在字典解析式内部,我们使用花括号{}表示一个字典。对于遍历到的每个元素x,我们可以指定要将其作为键key,并且用冒号:与其对应的平方x**2构成一个键值对,在字典中进行存储。

集合解析式

集合解析式用于从可迭代对象中创建一个新的集合。它将与列表解析式类似,但不会保留重复项。

new_set = {expression for item in iterable if condition}
  • expression是每个元素要执行的操作,可以是任何有效的 Python 表达式。

  • item 是从可迭代对象中依次读取的每个元素。

  • iterable 是被迭代的对象。

  • condition 是可选的,如果提供,则对元素进行过滤的条件。

下面我们来看一个例子:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_set = {x for x in my_list if x % 2 == 0}
print(new_set)

这段代码的含义是通过集合解析式从给定列表my_list中生成一个新集合new_set,该集合包含所有在my_list中出现的偶数元素。

具体来说,我们使用for循环语句遍历my_list中的每个元素,并将其赋值给变量x。在集合解析式中,我们使用花括号{}表示一个集合。对于遍历到的每个元素x,我们使用if语句判断是否为偶数,如果是,则将其添加到新集合new_set中。

关注下方《学姐带你玩AI》🚀🚀🚀

回复“python”了解更多学习资料

码字不易,欢迎大家点赞评论收藏!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值