Python元组tuple
一、元组定义
元组tuple像是一个列表list,它内部的值不可被修改。元组是一个有序的、不可变数据结构/类型
列表->元组 加锁过程
元组->列表 解锁过程
列表和元组对比 | list | tuple |
声明 | [] | () |
索引 | YES | YES |
切片 | YES | YES |
追加元素 | YES | NO |
修改元素 | YES | NO |
删除元素 | YES | NO |
基于值反查索引 | YES | NO |
包含关系查询 | YES | YES |
元组tuple对于大型数据处理速度优于列表list,如果你有一个常量集需要经常遍历(for),那么元组的效率优于列表
元组tuple由于其无法写入的特点,放在元组内部的数据自然就有一个"写保护",类似我们的sd卡、cf卡或者部分U盘
特别注意-1:当函数(方法)返回的数据大于一个时,一般以元组形式返回。
特别注意-2:由于元组的“写保护”模式,函数可以按照元组内部元素的位置顺序接收元组的数据
二、元组tuple支持什么数据类型
1 2 3 4 5 6 7 | name = '正正' #字符串Str age = 18 #整数Int height = 1.74 #浮点Float is_yes = True #布尔bool pets = [ '狗' , '猫' , '鱼' ] #列表List work_ctities = ( '北京' , '上海' ) #元组Tuple teacher = { '姓名' : '正正' } #字典Dict |
三、元组tuple的基本特性
增加:(1)支持空元组创建
删除:(1)仅支持元组整体删除
查询:(1)支持元组数据查询(基于下标、索引、index)
(2)支持切片查询
(3)支持第一级元素长度统计(len)
四、元组tuple创建
(1)空值创建
方法一:空值创建
1 | tuple_data1 = tuple () #空值创建 |
方法二:空值创建
1 | tuple_data2 = () #空值创建 |
特别方法:单个值创建
1 | tuple_data3 = ( "北京" ,) #单个值创建,必须要有逗号区分该类型为元组 |
特别方法:多值无括弧创建
1 | tuple_data4 = "北京" , "上海" , "杭州" #多值无括弧创建 |
1 2 3 4 5 6 7 8 9 10 11 12 | tuple_data_all = ( [ 1 , 2 , 3 ], ( 1 , 2 , 3 ), { 'name' : 'mike' , 'age' : 28 }, #字典2 3.14159 , #浮点 3 100 , '万门大学' , True , False ) print ( type (tuple_data_all)) print ( "元组长度->" , len (tuple_data_all)) |
输出:
<class 'tuple'>
元组长度-> 8
五、 访问元组
1 2 3 4 5 6 7 8 9 | tuple_1 = ( 1 , 'a' , 'BMW' , 'XFL' , 3 ) tuple_2 = ( 2 , 'b' , 'WMB' , 'LFX' , 4 ) print (tuple_1) #输出完整元组1 print (tuple_2) #输出完整元组2 print (tuple_1[ 1 ]) #输出tuple_1的第二个元素 print (tuple_1[ 2 :]) #输出tuple_1的第三个之后的元素 print (tuple_1[: 3 ]) #输出tuple_1的第四个之后的元素 print (tuple_1 * 2 ) #输出两遍tuple_1 print (tuple_1 + tuple_2) #输出tuple_1和tuple_2的混合元素 |
(1, 'a', 'BMW', 'XFL', 3)
(2, 'b', 'WMB', 'LFX', 4)
a
('BMW', 'XFL', 3)
(1, 'a', 'BMW')
(1, 'a', 'BMW', 'XFL', 3, 1, 'a', 'BMW', 'XFL', 3)
(1, 'a', 'BMW', 'XFL', 3, 2, 'b', 'WMB', 'LFX', 4)
1 2 3 | tuple_3 = ([ 'mike' , 28 ],[ 'Jason' , 36 ],( 1 , 2 , 3 ),{ '名字' : '正正' , '爱好' : '编程' }) print (tuple_3) print (tuple_3[ 0 ]) |
特别注意:
1、元组内的每个元素(数据),遵守该数据类型的原有规则。比如字符串类型是要加引号的‘’
2、可以有多层嵌套,每一层嵌套为一个独立体存在
3、元组的"写保护"只保护一级数据,如['mike',28]是元组的一个元素,这个元素内的元素可以按照类表的方式进行增删改查操作。如果元组内还是元组,那么即为元组的规则,无法"写入"操作
1 2 3 4 5 | tuple_3 = ([ 'mike' , 28 ],[ 'Jason' , 36 ],( 1 , 2 , 3 ),{ '名字' : '正正' , '爱好' : '编程' }) print (tuple_3[ 0 ]) print (tuple_3[ 0 : 1 ]) print (tuple_3[ 2 :]) print (tuple_3[: 4 ]) |
查询数据:
基于索引位置取数据
->tuple_3[0] 取一个为当前值的类型->['mike',28]
基于索引范围取数据
tuple_3[0:1]->(['mike', 28],) 取多个值还是一个元组
六、元组的操作
6.1 删除元组
1 2 3 | # 删除元组 tuple_1 = ([ 'mike' , 28 ],[ 'Jason' , 36 ],( 1 , 2 , 3 ),{ '名字' : '正正' , '爱好' : '编程' }) del tuple_1 |
6.2 元组的拼接
1 2 3 4 5 | # 元组的拼接 tuple_2 = ( 1 , 2 , 3 ) tuple_3 = ( 4 , 5 , 6 ) new_tuple = tuple_2 + tuple_3 #元组的拼接 print (new_tuple) #输出为(1,2,3,4,5,6) |
6.3 元组和列表转换
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 元组和列表转换 list_data1 = [ 1 , 2 , 3 ] new_tuple1 = tuple (list_data1) list_data2 = [ 4 , 5 , 6 ] new_tuple2 = tuple (list_data2) print (list_data1) #输出为->[1, 2, 3] print (list_data2) #输出为->[4, 5, 6] print (new_tuple1) #输出为->(1, 2, 3) print (new_tuple2) #输出为->(4, 5, 6) print ( id (list_data1)) #输出为->139625538807680 print ( id (new_tuple1)) #输出为->139625559198976 print ( id (list_data2)) #输出为->139625538807424 print ( id (new_tuple2)) #输出为->139625538984128 |
6.4 元组通过变量直接取值
1 2 3 | # 元组通过变量直接取值 personal_info = ( '正正' , 35 , '北京' ) name,age,city = personal_info #输出为->name->正正,age->35,city->北京 |
6.5 元组数量统计
1 2 3 | # 元素数量统计 message = ( 1 , 2 , 4 , 1 , 6 , 1 ) message.count( 1 ) #输出->3 |
6.6 元组自身复制
1 2 3 | # 自身复制 numbers = ( 1 , 2 ) new_numbers = numbers * 3 <br> # 输出->(1,2,1,2,1,2) |
6.7 元组长度输出
1 2 | # 元组的长度 num_set1 = ( 1 , 2 , 3 , 4 ) print ( len (num_set1)) #输出->4 |
6.8 元组的包含关系判断
1 2 3 | # 包含关系判断 message = ( '我' , '爱' , '你' ) print ( '爱' in message) |
6.9 切片延伸
1 2 3 4 5 6 | # 切片延伸 num = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) print (num[ 0 : 10 : 2 ]) #[起:止:步长] 输出->(0,2,4,6,8) # 特别注意-类似我们for循环里的range()函数 print (num[:: 2 ]) #输出->(0,2,4,6,8) # 特别注意-起止不设定默认从头到尾的范围 |
6.10 元组的嵌套
1 2 3 4 5 6 7 8 9 | matrix_list_1 = ( ( '拍黄瓜' , '夫妻肺片' , '田园沙拉' ), ( '宫保鸡丁' , '鱼香肉丝' , '番茄烧鸡蛋' ), ( '冰激凌' , '提拉米苏' , '水果' ), ( '啤酒' , '白酒' , '红酒' ) ) for matrix in matrix_list_1: for caiming in matrix: print (caiming,end = ',' ) |
元组嵌套,元组中的数据不可以修改
6.11 元组中列表穿透
元组数据不可以更改但是,元组中的列表数据可以更改
1 2 3 4 5 6 7 8 9 | # 元组和列表转换 tuple1_1 = ( [ 1 , 2 , 3 ], #A元素0,第一级数据, 注意列表内部为第二级数据(可穿透),可以进行增删改查,遵循list规则 28 , #B元素1,第一级数据,整数本身就不可以修改,同时整数也不是结构数据类型(不可穿透) ( 4 , 5 , 6 ) #C元素2,第一级数据,元组还是沿用元组的规则,只可查不可进行其他操作 ) tuple1_1[ 0 ][ 1 ] = 4 print (tuple1_1) tuple1_1[ 2 ][ 0 ] = 7 |
输出结果:
如果要真正意义上的任何值不修改,那么就要保证内部数据在构建的时候尽可能全部是元组
元组更多的是查询和提取数据,如果需要大面积修改数据,尽量使用列表
6.12 元组中的内置函数
Python元组包含了以下内置函数
1、cmp(tuple1, tuple2):比较两个元组元素。
2、len(tuple):计算元组元素个数。
3、max(tuple):返回元组中元素最大值。
4、min(tuple):返回元组中元素最小值。
5、tuple(seq):将列表转换为元组。
元组可以在映射(和集合的成员)中作为键(key)使用,而列表不行
元组作为很多内建函数和方法的返回值存在
实例:
1 2 3 4 5 6 7 8 9 10 11 12 | tuple_1 = ( ( "张晓" , '男' , 26 , '本科' , '985' ), ( "刘备" , '女' , 27 , '硕士' , '211' ), ( "李慧" , '男' , 28 , '本科' , '双非' ), ( "吴飞" , '女' , 29 , '硕士' , '985' ), ( "赵爽" , '男' , 30 , '硕士' , '211' ), ( "钱米" , '女' , 31 , '硕士' , '双非' ), ( "孙怡" , '男' , 32 , '本科' , '985' ), ) for tuple1 in tuple_1: if tuple1[ 1 ] = = '男' and tuple1[ 2 ]< = 30 and tuple1[ 3 ] = = '硕士' and (tuple1[ 4 ] = = '985' or tuple1[ 4 ] = = '211' ): print (tuple1[ 0 ]) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-04-08 SpringBoot(八)----SpringBoot配置日志文件
2020-04-08 SpringBoot(七)-----查看配置报告