元组tuple是 Python 中内置的不可变有序序列类型用于存储一组固定、不可修改的数据。元组与列表的区别具有不可变性元组一旦创建完成不能修改、添加、删除其中的元素这是它和列表最大的区别。有序性元素按照定义顺序存储支持通过下标索引访问。可重复、可任意嵌套支持存储重复元素可嵌套数字、字符串、列表、元组等任意数据类型。使用小括号()表示这是元组最直观的标识。适用场景存储不希望被修改的固定数据如配置项、坐标、常量函数多返回值传递底层默认用元组数据解包、多变量赋值作为字典的键列表不可以元组就像一个密封好的固定容器放进去什么就是什么不能再改动而列表是打开的盒子可以随时增删改内容。特性元组 (tuple)列表 (list)符号()[]可变性不可变只读可变可增删改内置方法少仅查询多增删改查适用场景固定数据、保护数据频繁变动的数据一、常用基础操作1. 索引与切片语法元组[start:stop:step]规则和列表完全一致索引通过下标获取单个元素支持正负索引切片截取部分元素左闭右开步长可自定义反转利用反向切片[::-1]实现元组整体 / 局部反转2. 拼接与重复拼接使用合并两个元组生成新元组重复使用*复制元组内容生成新元组3. 成员判断通过in/not in判断元素是否存在于元组中返回布尔值True/False。4. 遍历循环使用for循环直接遍历元组依次取出每个元素。二、元组内置方法仅 2 个元组不可变方法远少于列表仅提供查询类方法count(元素)统计指定元素在元组中出现的次数index(元素)查找指定元素第一次出现的索引元素不存在则直接报错三、元组解包高频实用技巧将元组元素一次性赋值给多个变量日常开发、数据接收场景使用极多。标准解包变量数量 元组元素数量占位符_接收不需要的元素作为匿名占位星号*多元素打包*变量可接收多个连续元素并自动转为列表四、元组嵌套元组内部可嵌套列表、其他元组等数据类型元组本身不可变无法修改元组顶层元素若元组内嵌套列表可变类型列表内部元素可以正常修改五、内存地址特性元组属于不可变对象Python 会对内容相同的小型元组做内存缓存优化 内容一致的元组大概率指向同一个内存地址id()结果相同元组创建后自身内存地址永远不会改变。#元组不同于列表是不可变的元组使用小括号()列表使用中括号[]。 #元组的基本操作和列表类似可以进行索引、切片、连接、重复等操作但不能修改元组中的元素。 #创建一个元组 tuple_1 (1,2,3,4,5) print(tuple_1) #输出(1, 2, 3, 4, 5) #如果元组中只有一个元素 tuple_only_one (1,)#格式应该是数字后添加如果不添加则不是 print(type(tuple_only_one)) #不添加逗号 tuple_2 (1) print(type(tuple_2))#输出class int说明不是元组 #不添加逗号的时候括号2表示的就是2只是添加了括号运算优先级 print(type(abc))#输出class str #元组的索引和切片 tuple_3 (1, 2, 3, 4, 5) print(tuple_3[0]) #输出1 print(tuple_3[1:4]) #输出(2, 3, 4) print(tuple_3[-1]) #输出5 print(tuple_3[::2])#输出(1, 3, 5) #[start:stop:step]其中start表示切片的起始位置默认为0stop表示切片的结束位置不包含stop位置的元素step表示切片的步长默认为1. #如果对全部的数据进行操作则start,stop可以省略直接为[::step] print(tuple_3[:])#打印全部元素 print(tuple_3[::])#打印全部元素step省略表示默认为1start和stop省略表示默认为0和len(tuple_3)即从头到尾进行切片操作。 #元组进行反转 tuple_3_reversed tuple_3[::-1]#-1表示反向切片即从最后一个元素开始步长为-1依次取出元素直到第一个元素为止。 print(tuple_3_reversed) #输出(5, 4, 3, 2, 1) tuple_3_a tuple_3[1:4][::-1]#想要对部分片段继续进行反转先对部分片段进行切片操作再对切片结果进行反转。 print(tuple_3_a) #元组常用的内置方法 .conut()和.index() 分别表示元素出现的次数和第一个元素出现的位置 tuple_3 (1, 2, 3, 4, 5,1,1,1,2) print(tuple_3.count(2)) #输出2count方法用于统计元组中某个元素出现的次数 print(tuple_3.index(3)) #输出2index方法用于查找元素在元组中的索引位置找不到直接报错如果有多个相同的元素则返回第一个元素的索引位置。 print(tuple_3.count(1)) #输出4统计元素1在元组中出现的次数 print(tuple_3.index(2)) #输出1查找元素2在元组中的索引位置返回第一个元素2的索引位置。 # print(tuple_3.index(7)) #输出ValueError: tuple.index(x): x not found查找元素7在元组中的索引位置找不到直接报错。 #元组的连接和重复 tuple_4 (1, 2, 3) tuple_5 (4, 5, 6) tuple_6 tuple_4 tuple_5 #连接 print(tuple_6) #输出(1, 2, 3, 4, 5, 6) #***************************************** tuple_7 tuple_4 * 3 #重复 print(tuple_7) #输出(1, 2, 3, 1, 2, 3,1,2,3) #创建空元组 tuple_8 () tuple_9 tuple() print(ftype(tuple_8):{type(tuple_8)})#type(tuple_8):class tuple print(ftype(tuple_9):{type(tuple_9)})#type(tuple_9):class tuple #将列表转为元组 list_1 [1,2,3] list_convert_tuple tuple(list_1) print(list_convert_tuple) #输出(1, 2, 3) print(type(list_convert_tuple)) #输出class tuple #成员判断 in / not in tuple_10 (1,4,6,7,8,9) print(4 in tuple_10) #输出True判断元素4是否在元组tuple_10中 print(5 in tuple_10) #输出False判断元素5是否在元组tuple_10中 print(5 not in tuple_10) #输出True判断元素5是否不在元组tuple_10中 print(100 not in tuple_10) #输出True判断元素100是否不在元组tuple_10中 #遍历循环 tuple_11 (1,2,3,4,5) for i in tuple_11: print(i) #输出1 2 3 4 5依次输出元组tuple_11中的每个元素prin #其中的print(i)语句在循环体内每次循环都会执行一次输出当前元素i的值。循环结束后所有元素都被输出完毕。 #print(tuple_11[0],tuple_11[1],tuple_11[2],tuple_11[3],tuple_11[4])#输出1 2 3 4 5依次输出元组tuple_11中的每个元素 #解包***重要常用*** #解包将元组中的元素依次赋值给多个变量变量的数量必须与元组中的元素数量相同。 tuple_12 (1, 2, 3) ta,tb,tc tuple_12 print(fta:{ta},tb:{tb},tc:{tc})#ta:1,tb:2,tc:3依次将元组tuple_12中的元素赋值给变量ta、tb、tc并输出变量的值。 #如果只想要去除元组中的某个元素可以使用占位符_表示不需要的元素。 tuple_13 (1, 2, 3, 4) _,tb,tc,_ tuple_13 print(ftb:{tb},tc:{tc})#tb:2,tc:3 print(f_:{_})#_:4占位符_表示不需要的元素4但在解包过程中仍然会被赋值给变量_所以输出的结果是4._第一次是1第二次是4最后一次是4. #如果元组中元素多只想去第一个和最后一个元素可以使用*运算符将中间的元素打包成一个列表。 tuple_14 (1, 2, 3, 4, 5) t1,t2,*t3,t5 tuple_14 print(ft1:{t1},t2:{t2},t3:{t3},t5:{t5})#t1:1,t2:2,t3:[3, 4],t5:5使用*运算符将元组tuple_14中的中间元素3和4打包成一个列表t3并输出变量的值。t1和t2分别获取第一个和第二个元素t5获取最后一个元素。 #元组的嵌套 元组中可以嵌套列表也可以嵌套其他元组。 tuple_15 (1,2,[3,4],(5,6),7) print(type(tuple_15))#输出class tuple说明tuple_15是一个元组 print(type(tuple_15[2]))#输出class list说明tuple_15中的第三个元素是一个列表 #那是否可以对元组中的列表进行修改呢 # 答案是可以的因为元组本身是不可变的但元组中的元素如果是可变类型如列表则可以修改该元素。 tuple_15[2][0] 30 print(tuple_15) #输出(1, 2, [30, 4], (5, 6), 7)说明虽然元组tuple_15本身不可变但其中的列表元素可以被修改。 #元组本身不能修改 # tuple_15[0] 10 #输出TypeError: tuple object does not support item assignment说明元组tuple_15的第一个元素不能被修改因为元组是不可变的。 #元组的内存地址 tuple_16 (1, 2, 3) print(id(tuple_16)) tuple_17 (1, 2, 3) print(id(tuple_17)) #tuple_16和tuple_17的内存 地址可能相同也可能不同这取决于Python的内存管理机制。在某些情况下Python会对小整数进行缓存因此tuple_16和tuple_17可能指向同一个内存地址。但在其他情况下它们可能指向不同的内存地址。总之元组是不可变的因此它们的内存地址不会改变。
零基础学 Python合集--2:元组特性与常用操作
发布时间:2026/5/28 7:17:30
元组tuple是 Python 中内置的不可变有序序列类型用于存储一组固定、不可修改的数据。元组与列表的区别具有不可变性元组一旦创建完成不能修改、添加、删除其中的元素这是它和列表最大的区别。有序性元素按照定义顺序存储支持通过下标索引访问。可重复、可任意嵌套支持存储重复元素可嵌套数字、字符串、列表、元组等任意数据类型。使用小括号()表示这是元组最直观的标识。适用场景存储不希望被修改的固定数据如配置项、坐标、常量函数多返回值传递底层默认用元组数据解包、多变量赋值作为字典的键列表不可以元组就像一个密封好的固定容器放进去什么就是什么不能再改动而列表是打开的盒子可以随时增删改内容。特性元组 (tuple)列表 (list)符号()[]可变性不可变只读可变可增删改内置方法少仅查询多增删改查适用场景固定数据、保护数据频繁变动的数据一、常用基础操作1. 索引与切片语法元组[start:stop:step]规则和列表完全一致索引通过下标获取单个元素支持正负索引切片截取部分元素左闭右开步长可自定义反转利用反向切片[::-1]实现元组整体 / 局部反转2. 拼接与重复拼接使用合并两个元组生成新元组重复使用*复制元组内容生成新元组3. 成员判断通过in/not in判断元素是否存在于元组中返回布尔值True/False。4. 遍历循环使用for循环直接遍历元组依次取出每个元素。二、元组内置方法仅 2 个元组不可变方法远少于列表仅提供查询类方法count(元素)统计指定元素在元组中出现的次数index(元素)查找指定元素第一次出现的索引元素不存在则直接报错三、元组解包高频实用技巧将元组元素一次性赋值给多个变量日常开发、数据接收场景使用极多。标准解包变量数量 元组元素数量占位符_接收不需要的元素作为匿名占位星号*多元素打包*变量可接收多个连续元素并自动转为列表四、元组嵌套元组内部可嵌套列表、其他元组等数据类型元组本身不可变无法修改元组顶层元素若元组内嵌套列表可变类型列表内部元素可以正常修改五、内存地址特性元组属于不可变对象Python 会对内容相同的小型元组做内存缓存优化 内容一致的元组大概率指向同一个内存地址id()结果相同元组创建后自身内存地址永远不会改变。#元组不同于列表是不可变的元组使用小括号()列表使用中括号[]。 #元组的基本操作和列表类似可以进行索引、切片、连接、重复等操作但不能修改元组中的元素。 #创建一个元组 tuple_1 (1,2,3,4,5) print(tuple_1) #输出(1, 2, 3, 4, 5) #如果元组中只有一个元素 tuple_only_one (1,)#格式应该是数字后添加如果不添加则不是 print(type(tuple_only_one)) #不添加逗号 tuple_2 (1) print(type(tuple_2))#输出class int说明不是元组 #不添加逗号的时候括号2表示的就是2只是添加了括号运算优先级 print(type(abc))#输出class str #元组的索引和切片 tuple_3 (1, 2, 3, 4, 5) print(tuple_3[0]) #输出1 print(tuple_3[1:4]) #输出(2, 3, 4) print(tuple_3[-1]) #输出5 print(tuple_3[::2])#输出(1, 3, 5) #[start:stop:step]其中start表示切片的起始位置默认为0stop表示切片的结束位置不包含stop位置的元素step表示切片的步长默认为1. #如果对全部的数据进行操作则start,stop可以省略直接为[::step] print(tuple_3[:])#打印全部元素 print(tuple_3[::])#打印全部元素step省略表示默认为1start和stop省略表示默认为0和len(tuple_3)即从头到尾进行切片操作。 #元组进行反转 tuple_3_reversed tuple_3[::-1]#-1表示反向切片即从最后一个元素开始步长为-1依次取出元素直到第一个元素为止。 print(tuple_3_reversed) #输出(5, 4, 3, 2, 1) tuple_3_a tuple_3[1:4][::-1]#想要对部分片段继续进行反转先对部分片段进行切片操作再对切片结果进行反转。 print(tuple_3_a) #元组常用的内置方法 .conut()和.index() 分别表示元素出现的次数和第一个元素出现的位置 tuple_3 (1, 2, 3, 4, 5,1,1,1,2) print(tuple_3.count(2)) #输出2count方法用于统计元组中某个元素出现的次数 print(tuple_3.index(3)) #输出2index方法用于查找元素在元组中的索引位置找不到直接报错如果有多个相同的元素则返回第一个元素的索引位置。 print(tuple_3.count(1)) #输出4统计元素1在元组中出现的次数 print(tuple_3.index(2)) #输出1查找元素2在元组中的索引位置返回第一个元素2的索引位置。 # print(tuple_3.index(7)) #输出ValueError: tuple.index(x): x not found查找元素7在元组中的索引位置找不到直接报错。 #元组的连接和重复 tuple_4 (1, 2, 3) tuple_5 (4, 5, 6) tuple_6 tuple_4 tuple_5 #连接 print(tuple_6) #输出(1, 2, 3, 4, 5, 6) #***************************************** tuple_7 tuple_4 * 3 #重复 print(tuple_7) #输出(1, 2, 3, 1, 2, 3,1,2,3) #创建空元组 tuple_8 () tuple_9 tuple() print(ftype(tuple_8):{type(tuple_8)})#type(tuple_8):class tuple print(ftype(tuple_9):{type(tuple_9)})#type(tuple_9):class tuple #将列表转为元组 list_1 [1,2,3] list_convert_tuple tuple(list_1) print(list_convert_tuple) #输出(1, 2, 3) print(type(list_convert_tuple)) #输出class tuple #成员判断 in / not in tuple_10 (1,4,6,7,8,9) print(4 in tuple_10) #输出True判断元素4是否在元组tuple_10中 print(5 in tuple_10) #输出False判断元素5是否在元组tuple_10中 print(5 not in tuple_10) #输出True判断元素5是否不在元组tuple_10中 print(100 not in tuple_10) #输出True判断元素100是否不在元组tuple_10中 #遍历循环 tuple_11 (1,2,3,4,5) for i in tuple_11: print(i) #输出1 2 3 4 5依次输出元组tuple_11中的每个元素prin #其中的print(i)语句在循环体内每次循环都会执行一次输出当前元素i的值。循环结束后所有元素都被输出完毕。 #print(tuple_11[0],tuple_11[1],tuple_11[2],tuple_11[3],tuple_11[4])#输出1 2 3 4 5依次输出元组tuple_11中的每个元素 #解包***重要常用*** #解包将元组中的元素依次赋值给多个变量变量的数量必须与元组中的元素数量相同。 tuple_12 (1, 2, 3) ta,tb,tc tuple_12 print(fta:{ta},tb:{tb},tc:{tc})#ta:1,tb:2,tc:3依次将元组tuple_12中的元素赋值给变量ta、tb、tc并输出变量的值。 #如果只想要去除元组中的某个元素可以使用占位符_表示不需要的元素。 tuple_13 (1, 2, 3, 4) _,tb,tc,_ tuple_13 print(ftb:{tb},tc:{tc})#tb:2,tc:3 print(f_:{_})#_:4占位符_表示不需要的元素4但在解包过程中仍然会被赋值给变量_所以输出的结果是4._第一次是1第二次是4最后一次是4. #如果元组中元素多只想去第一个和最后一个元素可以使用*运算符将中间的元素打包成一个列表。 tuple_14 (1, 2, 3, 4, 5) t1,t2,*t3,t5 tuple_14 print(ft1:{t1},t2:{t2},t3:{t3},t5:{t5})#t1:1,t2:2,t3:[3, 4],t5:5使用*运算符将元组tuple_14中的中间元素3和4打包成一个列表t3并输出变量的值。t1和t2分别获取第一个和第二个元素t5获取最后一个元素。 #元组的嵌套 元组中可以嵌套列表也可以嵌套其他元组。 tuple_15 (1,2,[3,4],(5,6),7) print(type(tuple_15))#输出class tuple说明tuple_15是一个元组 print(type(tuple_15[2]))#输出class list说明tuple_15中的第三个元素是一个列表 #那是否可以对元组中的列表进行修改呢 # 答案是可以的因为元组本身是不可变的但元组中的元素如果是可变类型如列表则可以修改该元素。 tuple_15[2][0] 30 print(tuple_15) #输出(1, 2, [30, 4], (5, 6), 7)说明虽然元组tuple_15本身不可变但其中的列表元素可以被修改。 #元组本身不能修改 # tuple_15[0] 10 #输出TypeError: tuple object does not support item assignment说明元组tuple_15的第一个元素不能被修改因为元组是不可变的。 #元组的内存地址 tuple_16 (1, 2, 3) print(id(tuple_16)) tuple_17 (1, 2, 3) print(id(tuple_17)) #tuple_16和tuple_17的内存 地址可能相同也可能不同这取决于Python的内存管理机制。在某些情况下Python会对小整数进行缓存因此tuple_16和tuple_17可能指向同一个内存地址。但在其他情况下它们可能指向不同的内存地址。总之元组是不可变的因此它们的内存地址不会改变。