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

news2024/9/27 22:38:51

目录

拆包

交换变量值

引用

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)   # 地址: True

str1 = "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 + b

print(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 21

print(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 * b

print(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+c

print(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 args


print(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 kwargs

print(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 a
    else:
        return b


print(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.coloradmin.cn/o/2171306.html

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

相关文章

微服务SpringGateway解析部署使用全流程

官网地址&#xff1a; Spring Cloud Gateway 1、SpringGateway简介 核心功能有三个&#xff1a; 路由&#xff1a;用于设置转发地址的 断言&#xff1a;用来判断真实应该请求什么地址 过滤器&#xff1a;可以过滤地址和处理参数 1、什么是网关 网关是后台服务的统一入口…

如何排查 Windows 无法连接ubuntu远程服务器

当本机连接不上远程服务器&#xff0c;排查问题的思路是确保本机和远程的 sshd 服务都没有问题。 为什么要写这篇文章&#xff0c;一是记录防止忘记&#xff0c;另一方面是 gpt 给的方案太宽泛&#xff0c;需要自己逐一排查。而我们自己遇到的问题多半是有上下文的。这些上下文…

H. Sakurako‘s Test

H. Sakurakos Test 原题 本题通过前缀和和二分可以解决, 原理并不是很困难, 但是比较难想到 我们只需要对每一个 x, 二分求出中位数, 预处理好即可, 二分的检查通过求k倍的x可以在调和级数的时间内实现 代码 #include <bits/stdc.h> #define int long longusing name…

若依 Vue3 前端分离 3.8.8 版实现去除首页,登录后跳转至动态路由的第一个路由的页面

一、前言 某些项目可能并不需要首页&#xff0c;但在若依中想要实现不显示首页&#xff0c;并根据不同角色登录后跳转至该角色的第一个动态路由的页面需要自己实现&#xff0c;若依中没有实现该功能的特定代码。 二、代码 1. src\permission.js 在 src\permission.js 中添加…

无限大薄板的电场

单块无限大薄板两端的电场 单块无限大的薄板&#xff0c;如果上面带有均匀分布的电荷&#xff0c;就会在薄板的两侧产生电场&#xff0c;电场大小与距离平板的位置无关&#xff0c;方向与平板垂直&#xff0c;如果平板带正电荷&#xff0c;则电场方向向外指向两侧&#xff0c;…

spring第一个入门框架

创建一个项目文件 创建一个module 配置pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

深入理解 Java 中的 Switch 语句

深入理解 Java 中的 Switch 语句 在 Java 编程中&#xff0c;switch 语句是一种强大的控制结构&#xff0c;能够根据表达式的值选择执行不同的代码块。本文将详细介绍 switch 的基本语法、使用案例、注意事项以及与 if 语句的选择。 基本语法 switch 语句的基本语法如下&#…

【漏洞复现】数字通云平台智慧政务 login 存在登录绕过漏洞

》》》产品描述《《《 数字通云平台智慧政务OA产品是基于云计算、大数据、人工智能等先进技术&#xff0c;为政府部门量身定制的智能化办公系统。该系统旨在提高政府部门的办公效率、协同能力和信息资源共享水平&#xff0c;推动电子政务向更高层次发展。 》》》漏洞描述《《《…

excel|获取一段时间内每日数据的条数

工作中经常需要统计一段时间内每日数据的条数&#xff0c;用于计算每日的销售单数或传播数等等 一、将日期列提取出来 二、在右侧一列&#xff0c;填入1&#xff0c;进行标记&#xff0c;crtld快速填充 三、创建数据透视表 选定区域 四、进行数据分析 五、得到结果

Linux防火墙-4表5链

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

反问面试官:如何实现集群内选主

面试官经常喜欢问什么zookeeper选主原理、什么CAP理论、什么数据一致性。经常都被问烦了&#xff0c;我就想问问面试官&#xff0c;你自己还会实现一个简单的集群内选主呢&#xff1f;估计大部分面试官自己也写不出来。 本篇使用 Java 和 Netty 实现简单的集群选主过程的示例。…

JS---获取浏览器可视窗口的尺寸

innerHeight 和 innerWidth 这两个方法分别是用来获取浏览器窗口的宽度和高度&#xff08;包含滚动条的&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…

Linux驱动开发(速记版)--高级字符设备进阶

第二十四章 IO 模型引入 24.1 IO 的概念 IO是计算机系统内外数据交换过程&#xff0c;冯诺依曼架构下各部件协同工作。用户输入&#xff0c;CPU处理&#xff0c;结果输出。磁盘IO是内存与磁盘数据交换的核心&#xff0c;对信息交互至关重要。 24.2 IO 执行过程 Linux操作系统…

C++11中智能指针以及标准模板库 My_string My_stack

My_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring> #include <stdexcept>using namespace std;template<typename T> class My_string { private:T *ptr; // 指向字符数组的指针int size; /…

你的下一台手机会是眼镜吗?RTE 大会与你一同寻找下一代计算平台丨「空间计算和新硬件」论坛报名

周四 Meta 刚公布新一代 AR 眼镜 Orion 后&#xff0c;Perplexity 的 CEO 发了一条状态&#xff1a;「如果你还在做软件&#xff0c;请转型硬件。」 一家估值 30 亿美元的 AI 软件公司 CEO 说出这样的言论&#xff0c;既有有见到「最强 AR 眼镜」Orion 后的激动情绪&#xff0c…

【Redis】持久化机制--RDB和AOF

目录 1. RDB持久化 1.1 触发机制 1.2 流程说明 1.3 RDB文件的处理 1.4 RDB机制演示 1.5 RDB的优缺点 2. AOF持久化 2.1 使用AOF与基本演示 2.2 AOF的工作流程 2.3 文件同步&#xff08;缓冲区刷新策略&#xff09; 2.4 重写机制 2.5 AOF重写流程 2.6 启动时数据恢复 …

基于Diffusion的图像修复方法

基于Diffusion的图像修复方法 本文介绍基于 Diffusion 的几个图像修复的工作。图像修复任务有两种应用的场景&#xff0c;一是图片的某部分真的缺失了&#xff0c;需要修复处这部分内容&#xff1b;二是想要修改图片中的某个部分&#xff0c;更换/新增/删除物体&#xff0c;这…

godot4.2入门项目 dodge_the_creep学习记录

前言 在学习博客Godot4 你的第一个2d游戏中的项目时&#xff0c;遇到了点小问题&#xff0c;记录一下。 官方项目 传送门 问题 怪兽直接从屏幕中间部分冒出来&#xff0c;以及角色出现时位于屏幕外角色被设置的背景图遮挡 解决方法 1.节点的位置没有对齐&#xff0c;正确示例…

李宏毅机器学习2022-HW8-Anomaly Detection

文章目录 TaskBaselineReportQuestion2 Task 异常检测Anomaly Detection 将data经过Encoder&#xff0c;在经过Decoder&#xff0c;根据输入和输出的差距来判断异常图像。training data是100000张人脸照片&#xff0c;testing data有大约10000张跟training data相同分布的人脸…

9.27每日作业

将之前实现的顺序表、栈、队列都更改成模板类 顺序表&#xff1a; list.hpp #ifndef LIST_HPP #define LIST_HPP#include <iostream> #include<memory.h> #include<stdlib.h> #include<string.h> using namespace std;//typedef int T; //类…