Python(六)-拆包,交换变量名,lambda

目录

拆包

交换变量值

引用

lambda函数

lambda实例

字典的lambda

推导式

列表推导式

列表推导式+if条件判断

for循环嵌套列表推导式

字典推导式

集合推导式


拆包

看一下在Python程序中的拆包:把组合形成的元组形式的数据,拆分出单个元素内容。

变量名1,变量名2,... = 结果

 例

(1)在一个函数中,使用return返回求解两个数的和、差;

(2)使用items()方式遍历处理字典中存储的学生信息各个键与值;

# 1 定义函数: 返回两个参数的 和 与 差
def get_sum_sub(a, b):return a+b,a-b# 2 调用
# 2.1 方式一 手动
result = get_sum_sub(10, 2)
print(result)
print(type(result))  # <class 'tuple'>print(result[0])
print(result[1])# 2.2 方式二 自动
res1,res2 = get_sum_sub(12, 2)
print(res1, '---->', res2)# 3 遍历 字典
dict1 = {"name":"女儿国国王", "age":18, "skill":"XXX"}# 3.1 方式一
for item in dict1.items():key = item[0]val = item[1]print(key, '--->', val)print("*" * 100)# 3.2 方式二
for key,val in dict1.items():print(key, '--->', val)

交换变量值

使用拆包方式可以用于交换变量的值。

(1)有变量a、b,请完成变量之间值的交换;

(2)使用引入第三方变量的形式完成数值的交换;

# (1)有变量a、b,请完成变量之间值的交换;
a = 10
b = 20# (2)使用引入第三方变量的形式完成数值的交换;
# 方案二
(b, a) = (a, b)
print(f"a = {a}, b = {b}")# 方案一
c = a
a = b
b = c
print(f"a = {a}, b = {b}")# (3)使用拆包方式完成数值交换。
"""
有一个整数列表, 按正序排列 list1 = [100, 20, 40, 50, 30, 35]循环1: i in [0, -2]循环2: [i+1, -1]if 列表[i]>列表[i+1]: 交换
"""
list1 = [100, 20, 40, 50, 30, 35]# 逆序
for i in range(0, len(list1)-1):for j in range(i+1, len(list1)):if list1[i]>list1[j]:list1[i], list1[j] = list1[j], list1[i] # 交换位置
print(list1)# 正序
for i in range(0, len(list1)-1):for j in range(i+1, len(list1)):if list1[i]<list1[j]:list1[i], list1[j] = list1[j], list1[i] # 交换位置
print(list1)

引用

注意:因为列表和字典是可变类型,所以会开辟新空间,所以地址不相同

# 目标1: 引用
# 1.1 基本类型引用
a = 5;
b = 5;
print(id(a))
print(id(b))
print("-" * 50)# 字符串
c = "abc"
d = "abc"
print(id(c))
print(id(d))
print("-" * 50)
# 1.2 复杂类型引用
# 1.2.1 列表(可变)
list1 = [1,3,5]
list2 = [1,3,5]
print(id(list1)) # 1979679672512
print(id(list2)) # 1979678989952
print("-" * 50)# 1.2.2 元组(不可变)
t1 = (1,3,5)
t2 = (1,3,5)
print(id(t1))
print(id(t2))
print("-" * 50)# 1.2.3 字典(可变)
dict1 = {"a":1, "b":2, "c":3, "d":4}
dict2 = {"a":1, "b":2, "c":3, "d":4}
print(id(dict1)) # 1565550724096
print(id(dict2)) # 1565550724160
print("-" * 50)# 3 对比内容
# 3.1 基本类型
a = 5;
b = 5;print(a == b)   # 内容: True
print(a is b)   # 地址: Truestr1 = "aaa"
str2 = "aaa"print(a == b)   # 内容: True
print(a is b)   # 地址: True
print("-" * 50)# 3.2 复杂类型
# 3.2.1 列表(可变)
list1 = [1,3,5]
list2 = [1,3,5]
print(list1 == list2)  # 内容: True
print(list1 is list2)  # 地址: False
print("-" * 50)# 3.2.2 元组(不可变)
t1 = (1,3,5)
t2 = (1,3,5)print(t1 == t2)  # 内容: True
print(t1 is t2)  # 地址: True
print("-" * 50)# 1.2.3 字典(可变)
dict1 = {"a":1, "b":2, "c":3, "d":4}
dict2 = {"a":1, "b":2, "c":3, "d":4}print(dict1 == dict2)  # 内容: True
print(dict1 is dict2)  # 地址: False
print("-" * 50)

lambda函数

定义匿名函数需要使用lambda关键字,可以创建小型匿名函数。

匿名函数表示没有名字的函数,这种函数得名于省略了用def关键字声明函数的标准步骤

# 定义匿名函数语法:

lambda 参数列表 : 表达式

# 调用匿名函数语法:

函数名 = lambda 参数列表 : 表达式
函数名([参数列表])

(1)求解两个数之和;

(2)使用def定义函数,完成求和操作;

(3)使用匿名函数简化函数求和操作。

# 目标1: 获取两个数的和
# 方式一
def get_sum(a, b):return a + bprint(get_sum(2, 5))# 方式二:lambda简化
get_sum_2 = lambda a, b : a + b
print(get_sum_2(6, 5))# 目标2: 明确有两个参数, 由用户来确定计算的规则
def get_result(a, b, fn):return fn(a, b)result1 = get_result(10, 5, lambda a, b : a * b)
print(result1)result2 = get_result(10, 5, lambda a, b : a / b)
print(result2)result3 = get_result(10, 5, lambda a, b : a + b)
print(result3)result4 = get_result(10, 5, lambda a, b : a - b)
print(result4)

lambda实例

# 1 无参数
# 1.1 不用lambda
def func1():return 21print(func1) # 地址
print(func1()) # 内容# 1.2 用lambda
func1_2 = lambda : 66
print(func1_2) # 地址
print(func1_2()) # 内容# 2 带参数
# 2.1 不用lambda
def func2(a, b):return a * bprint(func2(10, 20))# 2.2 用lambda
func2_2 = lambda a, b : a * b
print(func2_2(3, 60))# 3 带默认参数的lambda表达式
# 3.1 不用lambda
def func3(a, b, c=100):return a+b+cprint(func3(1, 2))
print(func3(1, 2, 3))# 3.2 用lambda
func3_2 = lambda a, b, c=100: a+b+c
print(func3_2(3, 2))
print(func3_2(3, 2, 20))# 4 不定长参数:可变参数*args
# # 4.1 不用lambda
def func4(*args):return argsprint(func4(10, 20, 30, 40))
print(type(func4(10, 20, 30, 40)))# 4.2 用lambda
func4_2 = lambda *args : args
print(func4_2(66, 88, 99, 21))
print(type(func4_2(10, 20, 30, 40)))# 5 不定长参数:可变参数**kwargs
# 5.1 不用lambda
def func5(**kwargs):return kwargsprint(func5(name="悟空", skill="七十二变", sex="男"))# 5.2 用lambda
func5_2 = lambda **kwargs : kwargs
print(func5_2(name="八戒", skill="三十六变", sex="男"))# 6 带if判断(三目运算符)的lambda表达式
# 6.1 不用lambda
def get_max(a, b):if a > b:return aelse:return bprint(get_max(2, 5))
print(get_max(20, 5))
print(get_max(20, 50))# 6.2 用lambda
get_max_2 = lambda a, b : a if a > b else b
print(get_max_2(120, 50))
print(get_max_2(120, 500))

字典的lambda

student_list = [{"name":"悟空", "skill" : "火眼金睛", "wulizhi":90},{"name":"二郎神", "skill" : "放狗", "wulizhi":120},{"name":"哪吒", "skill" : "三头六臂", "wulizhi":80}
]student_list.sort(key=lambda x: x["name"]) # 根据名字排序
print(student_list)student_list.sort(key=lambda x: x["wulizhi"]) # 根据武力值排序
print(student_list)student_list.sort(key=lambda x: x["wulizhi"], reverse=True)  # 根据武力值逆序
print(student_list)

推导式

共有三种推导:列表推导式,集合推导式,字典推导式

列表推导式

变量名 = [表达式 for 变量 in 列表]
变量名 = [表达式 for 变量 in 列表 if 条件]
变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]

创建一个0-9的列表

# 目标: 获取 0-9的列表
# 1 while
# 初始化计数器
i = 0
list1 = []
# 编写循环条件
while i <= 9:list1.append(i)# 更新计数器i += 1
print(list1)# 2 for
list1 = []
# 编写for循环
for i in range(0, 10):list1.append(i)
print(list1)# 3 列表表达式
list3 = [i for i in range(0, 10)]
print(list3)

列表推导式+if条件判断

变量 = [表达式 for 临时变量 in 序列 if 条件判断]

等价于

for 临时变量 in 序列:
    if 条件判断

生成0-9之间的偶数序列

list3 = [i for i in range(10) if i % 2 == 0]
print(list3)

for循环嵌套列表推导式

for 临时变量 in range(n):
    for 临时变量 in range(n):

等价于

变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列]

创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

# 不用 推导式
tuple_list = []
for i in range(1,3):for j in range(0,3):tuple_list.append((i, j))print(tuple_list)# 用 推导式
tuple_list_2 = [(i, j) for i in range(1,3) for j in range(0,3)]
print(tuple_list_2)

字典推导式

变量 = {key:value for key,value in 序列}

例1:创建一个字典:字典key是1-5数字,value是这个数字的2次方。

dict1 = {i:i**2 for i in range(1,6)}
print(dict1)

例2:把两个列表合并为一个字典

list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'male']
# 结果:person = {'name':'Tom', 'age':20, 'gender':'male'}person = {list1[i]:list2[i] for i in range(len(list1))}
print(person)

例3:提取字典中目标数据

counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'ACER': 99}# 需求:提取上述电脑数量大于等于200的字典数据
counts = {key:value for key, value in counts.items() if value >= 200}
print(counts)

集合推导式

集合推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]。

集合最大的特点就是去重

创建一个集合,数据为下方列表的2次方。

list1 = [1, 1, 2]
set1 = {i**2 for i in list1}
print(set1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

影响上证50股指期货价格的因素有哪些?

上证50股指期货&#xff0c;作为反映上海证券交易所最具代表性50只股票整体表现的期货合约&#xff0c;其价格同样受到一系列复杂因素的驱动。以下是对影响上证50股指期货价格的主要因素进行的详细分析。 因素一、期货合约的供求关系 股指期货市场是一个由多头和空头双方共同…

具身智能综述:鹏城实验室中大调研近400篇文献,深度解析具身智能

具身智能是实现通用人工智能的必经之路&#xff0c;其核心是通过智能体与数字空间和物理世界的交互来完成复杂任务。近年来&#xff0c;多模态大模型和机器人技术得到了长足发展&#xff0c;具身智能成为全球科技和产业竞争的新焦点。然而&#xff0c;目前缺少一篇能够全面解析…

面试遇到的质量体系10个问题(深度思考)

在某大型公司的招聘面试中关于质量体系本身及建设实践方面的10个问题&#xff0c;这些问题都是偏理论性强一些&#xff0c;但是可以通过这些问题来了解大型公司对质量体系的一些想法和预期的内容&#xff0c;本期先抛出来这10个问题&#xff0c;不附答案&#xff0c;目的就是让…

AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通

前言 我是Lison&#xff0c;以浅显易懂的方式&#xff0c;与大家分享那些实实在在可行之宝藏。 历经耗时数十个小时&#xff0c;总算将这份Stable Diffusion的使用教程整理妥当。 从最初的安装与配置&#xff0c;细至界面功能的详解&#xff0c;再至实战案例的制作&#xff…

数组基础(c++)

第1题 精挑细选 时限&#xff1a;1s 空间&#xff1a;256m 小王是公司的仓库管理员&#xff0c;一天&#xff0c;他接到了这样一个任务&#xff1a;从仓库中找出一根钢管。这听起来不算什么&#xff0c;但是这根钢管的要求可真是让他犯难了&#xff0c;要求如下&#x…

从细胞到临床:表观组学分析技术在精准医疗中的角色

中国科学院等科研院所的顶尖人才发起&#xff0c;专注于多组学、互作组、生物医学等领域的研究与服务。在Nature等国际知名期刊发表多篇论文&#xff0c;提供实验整体打包、免费SCI论文润色等四大优势服务。在表观组学分析技术方面&#xff0c;提供DAP-seq、ATAC-seq、H3K4me3 …

使用mendeley生成APA格式参考文献

mendeley 是一款文献管理工具&#xff0c;可以在word中方便的插入引用文献。 效果对比&#xff1a; 注&#xff1a;小绿鲸有三种导出格式&#xff0c;分别为复制、导出为Bibtex和导出为Endnote三种。 mendeley 下载与安装 Download Mendeley Reference Manager For Desktop mac…

98问答网是一个怎样的平台?它主要提供哪些服务?

98问答网是一个集知识分享、问题解答与社区交流为一体的综合性在线问答平台。该平台旨在通过汇聚来自各行各业的专家、学者以及广大网友的智慧&#xff0c;为用户提供一个快速获取准确信息、解决生活工作中遇到的各种问题的渠道。 主要服务包括&#xff1a; 问题提问与解答&am…

10.C++程序中的循环语句

C中提供了三种循环语句&#xff08;for循环&#xff0c;while循环以及do-while循环)来使程序员可以更方便地对数据进行迭代操作。 if语句 for语句的格式为&#xff1a; for(初始化语句&#xff1b;循环条件&#xff1b;迭代语句&#xff09; &#xff5b; 代码块 &#x…

【C++】stack和queue的使用及注意事项

在C中&#xff0c;stack和queue是标准模板库&#xff08;STL&#xff09;提供的两种容器适配器。它们提供了对底层容器的有限接口&#xff0c;使得只能执行特定的操作。下面是关于如何使用这两种容器适配器以及一些需要注意的事项。 C中的Stack 定义&#xff1a; stack是一种…

【中级通信工程师】终端与业务(十一):市场营销计划、实施与控制

【零基础3天通关中级通信工程师】 终端与业务(十一)&#xff1a;市场营销计划、实施与控制 本文是中级通信工程师考试《终端与业务》科目第十一章《市场营销计划、实施与控制》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目&#xff0c;有效复习通过率可达90%以上…

RabbitMQ高级特性-发送方确认

对于发送方发送消息到RabbitMQ的可靠性机制 引入&#xff1a;在持久化的消息正确存⼊RabbitMQ之后,还需要有⼀段时间(虽然很短,但是不可忽视)才能存⼊磁盘中.RabbitMQ并不会为每条消息都进⾏同步存盘(调⽤内核的fsync⽅法)的处理, 可能仅仅保存到操作系统缓存之中⽽不是物理磁…

流量新密码?AI宠物定制写真在小红书爆火,有人搞了10W+

大家好&#xff0c;我是灵魂画师向阳 不知道大家发现没&#xff1f;消费者对于情感价值的需求猛增&#xff0c;宠物服务行业衍生出越来越多的“拟人化”新业态。 宠物摄影和写真成为宠物经济中的新兴行业&#xff0c;吸引了越来越多的摄影师和养宠人的关注。 一些摄影师和摄…

gitlab修改访问端口

目录 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…

python【入门知识】

1、字面量 含义&#xff1a;程序中直接写出来固定的值&#xff0c;不是变量或表达式。 分类&#xff1a; 类型 描述 说明 数字&#xff08;Number&#xff09; 整数&#xff08;int&#xff09; 浮点数&#xff08;float&#xff09; 复数&#xff08;complex&#xff09; …

7-1.Android SQLite 之 SQLiteDatabase 简单编码模板(SQLiteDatabase 使用、SQL 语句编写)

一、SQLiteDatabase SQLite 是一种轻量级的数据库引擎&#xff0c;它非常适合在移动设备&#xff08;例如&#xff0c;Android&#xff09;上使用 SQLiteDatabase 允许应用程序与 SQLite 数据库进行交互&#xff0c;它提供了增删改查等一系列方法 二、SQLiteDatabase 简单编码…

DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL(附源码)

1、项目功能演示 DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL 2、项目功能描述 基于springboot问卷调查管理系统包括以下功能&#xff1a; 1、系统登录、系统注册 2、创建题目、题目信息查看 3、创建问卷、我的问卷信息查看 4、创建活动、我的活动信息…

STM32原理知识查询表

本篇文章主要收录单片机学习过程中的各种知识点原理&#xff0c;如果后面遇到了比较具体的应用&#xff0c;也会有专门的配套实践过程。 2024.09.27单片机的两种看门狗原理解析 持续待更新。。。。。

​‌Nginx配置文件的基本结构‌

Nginx的配置文件通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf。配置文件采用模块化设计&#xff0c;包含多个上下文&#xff08;context&#xff09;&#xff0c;每个上下文定义了一组相关的配置指令。主要的上下文包括&#xff1a; ‌‌main‌&#xff…

机器学习 | Scikit Learn中的普通最小二乘法和岭回归

在统计建模中&#xff0c;普通最小二乘法&#xff08;OLS&#xff09;和岭回归是两种广泛使用的线性回归分析技术。OLS是一种传统的方法&#xff0c;它通过最小化预测值和实际值之间的平方误差之和来找到数据的最佳拟合线。然而&#xff0c;OLS可以遭受高方差和过拟合时&#x…