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])

 

posted @   leagueandlegends  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-04-08 SpringBoot(八)----SpringBoot配置日志文件
2020-04-08 SpringBoot(七)-----查看配置报告
点击右上角即可分享
微信分享提示