实训第 4 天 ------ 7.18

本文详细介绍了Python中元祖和字典的基本概念、创建方法及常用操作,包括元祖的不可变性特点、字典的键值对结构及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.元祖(tuple)

元祖的含义:
1.元祖是一个不可变的序列。
2.它的操作方式基本上和列表是一致的。
3.所以你在操作元祖时,就把元祖当成是一个不可变的列表就ok了。
4.一般当我们希望数据不改变时,就使用元祖,其余情况都使用列表。
备注:元祖使用’小括号’创建。


my_tuple=()   #只要是 一个变量/常量=() 就是元祖的写法
print('元祖的类型吗:',type(my_tuple))   #<class 'tuple'>
#如何给元祖赋值呢?
my_tuple1=('孙悟空','abc','12','wang里')
print('元祖my_tuple1的值为:',my_tuple1)
#如何给元祖开辟内存大小呢?
my_tuple2=(10,120) #如果()有大于等于2个以上的int,表示的不是内存,内存只能写一个int值
my_tuple3=(120)   #内存大小为120
#元祖时不可变对象,不能尝试为元祖中的元素重新赋值
my_tuple3=('王老师','李老师','赵老师',)

获取元祖的下标去拿3值,或者修改值等操作 ---- 元祖不能重新赋值 ----重点

#my_tuple4[1]='李四'
my_tuple5=12,123,121545,'王老师'#此写法也是元祖的写法 但是不建议使用  Why?
my_tuple6=('王老师','李老师','赵老师',)
()有2层解释含义
1.()表示的是一个函数
2.()表示一个可以带参数/不带参数的方法
思考: 假设函数没有(), 效率咋样?
结果: 在企业工作里面使用()函数式元祖赋值,不建议省略(),影响数据的性能问题!

my_tuple7=('王老师','李老师','赵老师',12,1235)
print('没有删除元祖之前的值为:',my_tuple7)
del my_tuple7
#print('删除元祖之后的值为:',my_tuple7)

重点内容 : 和python的sel函数功能一样
思考: delete 和drop有什么区别?
(1).delete只能操作表数据,但是不能操作表结构,也不能改变表结构等
python的del也不能操作表结构,只能删除元祖、list列表中的数据!
(2).drop执行drop命令会将表和表数据彻底删除,并且drop回破坏表结构,
会导致内存溢出,数据很难维护。
总结:企业优化sql里面不能使用drop -------作业:如何优化sql?

my_tuple7=('aaa','bbbb','ccccc')
print('通过截取元祖1:2的 值为:',my_tuple7[1:2])
print('通过截取元祖1:2的 值为:',my_tuple7[2:3:2])  #步长

备注:元祖的截取是通过list列表的切片机制操作!
总结:计算机语言的括号的使用规则 ([]) {[]} " ‘’"

#多维元祖:大于等于2个()()的定义

my_tuple8 = (),()
my_tuple9 = [],[]
print('多维元祖:',type(my_tuple8))
print('多维列表1:',type(my_tuple9))
my_tuple10 = []
print('多维列表2:',type(my_tuple10))

备注:
利用一个[]可以创建一个list列表,但是定义2或者2个以上的[],表示的是多维元祖
--------列表其实是特殊的的元祖,元祖里面包含列表
my_tuple=(12) #元祖值为 12 12为长度 (‘ccccc’,) ,表示切片终止

备注:(12)有2种解释:
1.值为12
2.python解释器在内存里面执行的时候,会按照内存12操作数据

my_tuple11=('a','b','v','d')
num=len(my_tuple11)        #len表示元素的个数,和内存大小有区别
print('my_tuple11的元祖长度为:',num)

my_tuple12=(12,12222,1516,1616,-1,-2)
my_tuple13=(12,22222,1516,1616,-1,-2)
num1=max(my_tuple12)
num2=max((my_tuple12,my_tuple13))    #max有2种用法 1.取最大值 2.可以带多个参数,将元素原样输出!
num3=min(my_tuple12)
print('max1的最大值为:',num1)
print('max2的最大值为:',num2)
print('min的最小值为:',num3)

代码快捷键 ctrl+/ 调试bug ctrl+l

students=['jack','tom','john','amy','kim','sunny’]
 print(students)
 tuple1=tuple(students) print(tuple1)  #此代码表示强制类型转换

person=['jack','tom','john','amy','kim','sunny']
print('列表的值为',person)
#将列表转化为元祖
my_tuple14=tuple(person)
print('转换之后的值为:',my_tuple14)

列表转化为元祖的特性 --------重点面试
1.列表是有序的,列表可以改变值,元祖时固定位置,并且不可以改变值------
2.元祖的优先级大于列表的,在工作里面,尽量使用元祖
3.列表存放数据没有元祖安全、数据没有元祖容易维护、元祖查询数据的速度比列表快!
4.万物皆为对象----对象的属性、方法等就属于元素-----元素属于元祖

python的字典内容 -----重点
语法结构:字典名={key1:value1,key2:value2} —键值对

my_dict={1001,'王老师',1002,'李老师',1003,'赵老师'}  #字典
print('my_dict的值为:',type(my_dict))   #my_dict的值为: <class 'set'>

字典的核心特性:
1.字典使用{} —Why? json{} {}表示键值对的写法,此写法传输数据的速度极快
2.字典的关键字dict
3.字典通过键取值,键不可以重复,值可以重复 ------和java中Map一样 ------面试必问(Map List Set课下研究)
4.字典的键 和 数据库的id主键原理一样!


字典的键可以是任意的不可变对象(int,str,bool,tuple…),但是一般我们都会使用str
Map<Integer,String>Map =new Map<Integer,String>。
备注:python为什么key也用 str呢? 因为服务器永远是字符串 -------胶水语言
students={‘name’:‘Tom’,
‘age’:18,
‘sex’:‘男’,
‘name’:‘jack’,
} #代码具有可读性
print(‘通过students的键值对取值:’,students[‘name’]) #获取一个值
print(‘通过students的键值对取多个值值:’,students[‘name’],students[‘age’],students[‘sex’])
#如果使用了字典中不存在的键,会报错
print(‘通过students的键值对取值:’,students[‘121’]) #KeyError: ‘121’ -----空指针

my_tuple15=[12,1555,1442]
my_tuple16=(112, 55)
my_tuple17=my_tuple15+my_tuple16   #[(1,2),(3,4)]     Traceback (most recent call last):
print('my_tuple17是通过列表和元祖拼接的结果:',my_tuple17)
my_tuple18=[(1,2),(3,4)]
print('my_tuple18',type(my_tuple18))                 #my_tuple18 <class 'list'>

students1={'name':'Tom',
          'age':18,
          'sex':'男',
          #'name1':''
          }    #代码具有可读性
print('len的个数:',len(students1))
#get方法
print('get方法的作用:',students1.get('name'))     #有值
print('get方法的作用:',students1.get('name1'))    #无值  ---get方法的作用:none  ----企业大量使用

总结:
1.在key-value里面,企业通过key获取值,不建议使用index获取值!
2.检定义为str类型
3.键获取值的原理是什么? -----Mapping映射关系
扩展:映射的作用是什么? 为什么企业框架 ssm ssh都会采用映射呢?
1.通过映射可以减少开发代码量!
2.映射可以很好的将项目的业务进行关联维护! -------springMVC 课下看

students2={'name':'Tom',
          'age':18,
          'sex':'男',
          'name1':''
          }    #代码具有可读性
students2['name1']='蔡徐坤'   #如果有相同的key,覆盖
print('students2:',students2)
students2['name2']='王老师'     #如果没有,新增
print('students2:',students2)

result=students2.setdefault('age',145)
print('result的结果集是:',result)
result=students2.setdefault('dada',145)     #----------重点
print('result的结果集是:',result)

d1={'a':1,'b':2}
d2={'a':1,'b':6,'c':3}     # ---------更新操作
d1.update(d2)
print(d1)
print(d2)

CRUD操作 list 元祖 set集合 ------切片操作 ------遍历结果集 ------3大循环
#定义一个字典

person1={'1001':'王老师','name':'赵老师','age':12,'birthday':100}
person2=['1001王老师','name赵老师','age12']
print('person1的字典值为:',type(person1))
print('person1的返回次数为:',len(person1))
print('person2的返回次数为:',len(person2))

适应看底层源代码去学习编程 快捷键 ctrl + 鼠标左键

person3={‘1001’:‘王老师’,‘name’:‘赵老师’,‘age’:12,‘birthday’:100}
思考:如何获取person3的值? 用get key index 切片
1.通过str可以将{值} [值]一次性输出,并且不需要类型转换!
2.str不仅仅表示一个字符串,还表示一个函数功能,也是一个方法!

result2=str(person3)   #通过str表示的是将元素的值按照字符串输出
print('此时person3的类型是:',type(person3))
print('result的结果是:',result2)

seq1=('name','age','sex')
result3 = dict.fromkeys(seq1)  #fromkeys(seq) ---seq 表示一个对象或者参数都可以解释
print('result3的值为:',result3)   #fromkeys(seq)表示的是将字典,元祖里面的值作为键输出
seq2={'name':'fhf','age':'fdffdf','sex':'kjk'}
result4 = dict.fromkeys(seq2)
print('result4的值为:',result4)

此方法就是对key的一个扩展,Why?
1万条数据 10页 1000 key1=1000 key2=100
------fromkeys可以处理海量数据

**备注:**元祖里面嵌套字典/列表,对于key -values来讲会发生key -values的值的不确定性!

dict1={'name':['tom','jack'],'age':18,'sex':'男',18:19}
name=('name','age','sex')
if 'name' in dict1:
 print("name在字典中存在")
else:
 print("name在字典中不存在")

dict2 = {'name': ['tom', 'jack'], 'age': 18, 'sex': '男', 18: 19}
print(dict2.keys())           #结果:dict_keys(['name', 'age', 'sex', 18])

keys 和index的区别是什么?

keys的底层实现原理 —keys可以一次性查询去所有键,Why?
1.D.keys() -> a set-like object providing a view on D’s keys
keys底层其实就是实现一个like函数的查询方法! 但是like查询的效率太低
like不可以满足查询海量数据的操作!
补充回顾 (优化sql) -------面试必问
2.like有几种用法?
select name from emp like name =’% 王%’
select name from emp like name =‘王%’
select name from emp like name =’%王

select name from emp like name =’%’
3.like的缺点
(1).like查询数据会产生缓存!----jd 淘宝 —查询数据(slor的核心是《lunces》)全文检索
(2).like在操作数据的时候会将数据切片!数据可能不是很完整!-----不再使用!

dict1={'name':'tom','age':18}
print(dict1.values())
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人运动设备中的六轴姿态传感器,它集成了三轴陀螺仪三轴加速度计。这款传感器能够实时监测并提供设备的角速度线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp``MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式I2C地址,`getAcceleration()``getGyroscope()`则分别用于获取加速度角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()``getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准滤波,以消除噪声漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客其他开源资源是学习解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值