Python推导式学习

embedded/2024/12/25 23:08:54/

Python推导式是一种简洁且高效的代码编写方式,可以在一行代码中完成常见的循环和集合操作。Python推导式包括列表推导式、字典推导式、集合推导式生成器推导式

列表推导式可以根据一个已有的列表生成一个新的列表。
例如:new_list = [x*2 for x in old_list]
字典推导式可以根据一个已有的字典生成一个新的字典。
例如:new_dict = {key: value for key, value in old_dict.items() if value > 0}
集合推导式:可以根据一个已有的集合生成一个新的集合。
例如:new_set = {x for x in old_set if x % 2 == 0}
生成器推导式可以根据一个已有的生成器生成一个新的生成器
例如:new_generator = (x for x in old_generator if x > 0)
推导式可以在一行代码中完成循环和条件判断,比传统的方法更简洁和高效。然而,当推导式的逻辑较为复杂时,为了代码的可读性和可维护性,可能需要使用传统的方法来实现。

一、列表推导式

[expression for item in iterable if condition]

介绍:
(1)expression:生成元素的表达式。
(2)item:可迭代对象中的每个元素。
(3)iterable:可迭代对象,如列表、元组、字符串等。
(4)condition(可选):筛选条件,用于过滤元素。

例子:
例一:
# 第一部分 是表达式语句
# 第二部分 是for循环
# 第三部分 条件(可选) 只有满足条件 才将表达式结果放入列表
 

python">import randoml2 = [random.randint(0, 10) * i for i in range(10) if i == 1 or i == 5]
print(l2)


# 随机生产两个数的列表
 
例二:

python">options = [str(i) for i in range(17)]
print(options)

二、集合推导式

集合推导式类似于列表推导式,但创建的是集合,语法结构为:
{expression for item in iterable if condition}

介绍:
(1)expression:是一个计算结果的表达式,用来生成集合中的每个元素。
(2)item:是可迭代对象(例如列表、元组、字符串)中的每个元素。
(3)iterable:是可迭代对象本身。
(4)condition(可选):是一个筛选条件,用于过滤要包含在最终集合中的元素。

例子:
# 集合推导式
# 第一个部分是元素
# 第二部分是循环
# 第三部分是条件

python">s0 = {i for i in range(10) if i % 3 == 0}
print(s0, type(s0))  # 集合

三、字典推导式

字典推导式允许通过简洁的方式创建字典,语法结构为:
{key_expression: value_expression for item in iterable if condition}

介绍:
(1)key_expression:生成字典键的表达式。
(2)value_expression:生成字典值的表达式。
(3)item、iterable和condition 的含义与列表推导式相同。

例子:
# 字典推导式
# 第一部分是关于键和值格式的表达式
# 第二部分是循环
# 第三部分是条件

python">d0 = {f"key{i}": i ** 2 for i in range(10) if i % 2 == 0}
print(d0, type(d0))

四、元组推导式

动态生成元组,可以通过生成器表达式(Generator Expression)来间接实现类似的功能。生成器表达式与推导式类似,但使用圆括号而不是方括号,并返回一个生成器对象而不是列表。
元组是一种不可变的数据类型,它的元素无法修改。因此,没有必要使用推导式来创建或修改元组。
列表推导式、字典推导式和集合推导式都是为了创建可变的数据类型,例如列表、字典和集合。而元组则是一种不可变的数据类型,一旦创建,就无法修改其中的元素。
如果你想创建一个元组,可以直接使用小括号()将元素括起来,或者使用内置的tuple()函数将可迭代对象转换为元组。

python"># 元组推导式:得到一个生成器, 可以通过遍历获取生成器内容
g0 = (i ** 2 for i in range(10) if i % 2 == 1)
print(g0, type(g0))    # 生成器对象
for e in g0:print(e)

Python中没有元组推导式的概念,因为元组是不可变的数据类型。你可以直接使用小括号来创建元组,或者使用tuple()函数将可迭代对象转换为元组。

五、总结

(1)推导式可以嵌套,但应当谨慎使用以避免代码变得难以理解。
(2)推导式可以包含多个 for 子句和 if 条件,但通常应保持简洁明了以便于阅读和维护。
(3)在使用推导式时要注意内存消耗,尤其是处理大数据集时,推导式可能会比传统循环更快但也可能消耗更多内存。


http://www.ppmy.cn/embedded/148739.html

相关文章

重温设计模式--享元模式

文章目录 享元模式(Flyweight Pattern)概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式(Flyweight Pattern)概述 定义: 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

深入解析:Python中的决策树与随机森林

在这个数据驱动的时代,机器学习技术已经成为许多企业和研究机构不可或缺的一部分。其中,决策树和随机森林作为两种强大的算法,在分类和回归任务中表现尤为出色。本文将带领大家深入了解这两种算法在Python中的实现,从基础到实战&a…

远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?

前言 前段时间有个朋友过来咨询关于Windows使用第三方远程软件(向日葵、Todesk等)远程连接控制macOS系统,但出现了一些奇奇怪怪的问题。 比如在连接的时候,一直卡在100%连接,对方的电脑却已经显示已经被控制的状态。…

低代码软件搭建自学第二天——构建拖拽功能

文章目录 第 3 步:实现拖拽功能3.1 拖拽的基本概念3.2 创建基础拖拽界面代码示例:拖拽矩形运行结果: 3.3 添加多个拖拽元素代码示例:多个拖拽元素运行结果: 3.4 添加工具箱代码示例:工具箱 拖拽运行结果&a…

讲PPT 需要注意的事项

目录 1-逐字稿多少字? 2-在整个过程中要有学生上台展示的环节。(对于讲课适用) 3-多演练两遍,需要提前谋划好,走2-3遍,把时间卡好 4-PPT上的文字颜色要加强 5-PPT上的字号 6-逐字稿 1-逐字稿多少字&am…

Linux复习1——导论

世界三大操作系统:Windows、UNIX、Linux UNIX简洁、开放、可移植、价格高昂、闭源 Linux继承UNIX的优点、免费、开源 Linux的诞生:1991年,芬兰的一名大学生Linus Torvalds开发了linux内核 #开源的优点: 低风险:开…

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…

android sqlite 数据库简单封装示例(java)

sqlite 数据库简单封装示例&#xff0c;使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…