国庆节10月1日
--


Python3 元组的创建、访问、运算和内置函数

Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

1>>> tup1 = ('Google', 'Runoob', 1997, 2000)2>>> tup2 = (1, 2, 3, 4, 5)3>>> tup3 = "a", "b", "c", "d" # 不需要括号也可以4>>> type(tup3)5<class 'tuple'>创建空元组
1tup1 = ()元组中只包含一个元素时,需要在元素后面添加逗号, ,否则括号会被当作运算符使用:
1>>> tup1 = (50)2>>> type(tup1) # 不加逗号,类型为整型3<class 'int'>4
5>>> tup1 = (50,)6>>> type(tup1) # 加上逗号,类型为元组7<class 'tuple'>元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。

元组可以使用下标索引来访问元组中的值,如下实例:
1tup1 = ('Google', 'Runoob', 1997, 2000)2tup2 = (1, 2, 3, 4, 5, 6, 7)3
4print("tup1[0]: ", tup1[0])5print("tup2[1:5]: ", tup2[1:5])以上实例输出结果:
1tup1[0]: Google2tup2[1:5]: (2, 3, 4, 5)元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
1tup1 = (12, 34.56)2tup2 = ('abc', 'xyz')3tup3 = tup1 + tup24print(tup3)以上实例输出结果:
1(12, 34.56, 'abc', 'xyz')元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:
1tup = ('Google', 'Runoob', 1997, 2000)2print(tup)3del tup4print("删除后的元组 tup: ")5print(tup)以上实例元组被删除后,输出变量会有异常信息,输出如下所示:
1删除后的元组 tup :2Traceback (most recent call last):3 File "test.py", line 8, in <module>4 print (tup)5NameError: name 'tup' is not defined与字符串一样,元组之间可以使用 +、+=和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
| Python 表达式 | 结果 | 描述 |
|---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
>>> a = (1, 2, 3) >>> b = (4, 5, 6) >>> c = a+b >>> c (1, 2, 3, 4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接,c 就是一个新的元组,它包含了 a 和 b 中的所有元素。 |
>>> a = (1, 2, 3) >>> b = (4, 5, 6) >>> a += b >>> a (1, 2, 3, 4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接,a 就变成了一个新的元组,它包含了 a 和 b 中的所有元素。 |
('Hi!',) * 4 | (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x, end=" ") | 1 2 3 | 迭代 |
因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:
元组:
1tup = ('Google', 'Runoob', 'Taobao', 'Wiki', 'Weibo','Weixin')
| Python 表达式 | 结果 | 描述 |
|---|---|---|
| tup[1] | ‘Runoob’ | 读取第二个元素 |
| tup[-2] | ‘Weibo’ | 反向读取,读取倒数第二个元素 |
| tup[1:] | (‘Runoob’, ‘Taobao’, ‘Wiki’, ‘Weibo’, ‘Weixin’) | 截取元素,从第二个开始后的所有元素。 |
| tup[1:4] | (‘Runoob’, ‘Taobao’, ‘Wiki’) | 截取元素,从第二个开始到第四个元素(索引为 3)。 |
运行实例如下:
1>>> tup = ('Google', 'Runoob', 'Taobao', 'Wiki', 'Weibo', 'Weixin')2>>> tup[1]3'Runoob'4>>> tup[-2]5'Weibo'6>>> tup[1:]7('Runoob', 'Taobao', 'Wiki', 'Weibo', 'Weixin')8>>> tup[1:4]9('Runoob', 'Taobao', 'Wiki')10>>>Python元组包含了以下内置函数
| 序号 | 方法及描述 | 实例 |
|---|---|---|
| 1 | len(tuple) 计算元组元素个数。 | >>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3 >>> |
| 2 | max(tuple) 返回元组中元素最大值。 | >>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8' >>> |
| 3 | min(tuple) 返回元组中元素最小值。 | >>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>> |
| 4 | tuple(iterable) 将可迭代系列转换为元组。 | >>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu') |
所谓元组的不可变指的是元组所指向的内存中的内容不可变。
1>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')2>>> tup[0] = 'g' # 不支持修改元素3Traceback (most recent call last):4 File "<stdin>", line 1, in <module>5TypeError: 'tuple' object does not support item assignment6>>> id(tup) # 查看内存地址744406879048>>> tup = (1, 2, 3)9>>> id(tup)104441088800 # 内存地址不一样了从以上实例可以看出,重新赋值的元组 tup,绑定到新的对象了,不是修改了原来的对象。
tup1 = ('Google', 'Runoob', 1997, 2000));括号可以省略(tup3 = "a", "b", "c" 也是元组);空元组写 ()(50,) 才是元组,(50) 会被当成整数 50t[0] = 'g' 会报 TypeError: 'tuple' object does not support item assignment;del 只能把整个元组删掉id() 看得出地址变了)tup[-2] 是倒数第二个);切片 tup[1:4] 含头不含尾+ 连接两个元组(生成新元组)、+= 同样能拼接、* 复制重复、in 判断元素在不在、len() 数元素个数for x in 元组: 逐个取出元素;想让输出挤在同一行,就把输出函数结尾的换行换成空格len(tuple) 元素个数、max(tuple) 最大值、min(tuple) 最小值、tuple(可迭代对象) 转成元组list(元组) 转成列表(转完就能改了)、tuple(列表) 转成元组(转完就不能改了) 2-1 创建元组
创建文件 test_tuple.py,完成以下操作:
t1 = (1, 2, 3, 4, 5)t2 = ("a", "b", "c")t3 = (10,)(注意逗号)批改(2026-09-28):⚠️ 三个元组都创建正确(含
t3 = (10,)的单元素写法),但只打印了类型(输出三遍<class 'tuple'>),漏了元组本身的值;参考写法是print(f"t1: {t1}, 类型: {type(t1)}")这样三行分别打印。
一级 · 思路:三个元组按题面写好(单元素那个别丢掉逗号),再一行一个地打印”元组本身 + 它的类型”
二级 · 方法:元组字面量 (元素1, 元素2, ...),只有一个元素时要写成 (元素,);类型用 type() 查
三级 · 骨架:print(f"t1: {t1}, 类型: {____(t1)}") / t3 = (10,____)
1# 2-12t1 = (1, 2, 3, 4, 5)3t2 = ("a", "b", "c")4t3 = (10,)5
6print(f"t1: {t1}, 类型: {type(t1)}")7print(f"t2: {t2}, 类型: {type(t2)}")8print(f"t3: {t3}, 类型: {type(t3)}") 2-2 访问元组元素
创建文件 test_access.py,完成以下操作:
t = ("苹果", "香蕉", "橘子", "葡萄", "西瓜")批改(2026-09-28):✅ 正确(
t[0]得苹果、t[-1]得西瓜,切片t[1:3]得('香蕉', '橘子'))。
一级 · 思路:和列表一样按下标取元素、按区间切一段,只是括号换成了小括号;最后一个元素从尾部数
二级 · 方法:t[0] 第一个、t[-1] 最后一个、t[开始:结束] 切片(含头不含尾)
三级 · 骨架:print(f"第一个: {t[____]}") / print(f"切片 [1:3]: {t[1:____]}")
1# 2-22t = ("苹果", "香蕉", "橘子", "葡萄", "西瓜")3
4print(f"第一个: {t[0]}") # 苹果5print(f"最后一个: {t[-1]}") # 西瓜6print(f"切片 [1:3]: {t[1:3]}") # ('香蕉', '橘子') 2-3 元组拼接与重复
创建文件 test_concat.py,完成以下操作:
a = (1, 2, 3) 和 b = (4, 5, 6)+ 拼接两个元组* 重复元组 3 次批改(2026-09-28):✅ 正确(拼接
(1, 2, 3, 4, 5, 6)、重复三次(1, 2, 3, 1, 2, 3, 1, 2, 3),+和*都用对了)。
一级 · 思路:元组之间的拼接和重复跟字符串一样用加号和乘号;运算后拿到的是一个新元组,原来的没被改动
二级 · 方法:c = a + b 拼接、d = a * 3 重复
三级 · 骨架:c = a ____ b / d = a ____ 3
1# 2-32a = (1, 2, 3)3b = (4, 5, 6)4
5c = a + b6print(f"拼接: {c}") # (1, 2, 3, 4, 5, 6)7
8d = a * 39print(f"重复: {d}") # (1, 2, 3, 1, 2, 3, 1, 2, 3) 2-4 元组常用函数
创建文件 test_func.py,完成以下操作:
t = (3, 1, 4, 1, 5, 9, 2, 6)len() 计算长度max() 获取最大值min() 获取最小值批改(2026-09-28):✅ 正确(长度 8、最大值 9、最小值 1 都对)。
一级 · 思路:数个数、取最大、取最小都是内置函数,直接套在元组上
二级 · 方法:len(t) 长度、max(t) 最大值、min(t) 最小值
三级 · 骨架:print(f"长度: {____(t)}") / print(f"最大值: {____(t)}") / print(f"最小值: {____(t)}")
1# 2-42t = (3, 1, 4, 1, 5, 9, 2, 6)3
4print(f"长度: {len(t)}") # 85print(f"最大值: {max(t)}") # 96print(f"最小值: {min(t)}") # 1 2-5 元组与列表转换
创建文件 test_convert.py,完成以下操作:
lst = [1, 2, 3, 4, 5]tuple() 将列表转换为元组t = (6, 7, 8)list() 将元组转换为列表批改(2026-09-28):✅ 正确(列表转元组
(1, 2, 3, 4, 5)、元组转列表[6, 7, 8]都对;转换结果直接赋回lst、t两个变量,不影响结果)。
一级 · 思路:转换用与目标类型同名的内置函数,把要转的对象当参数传进去就行
二级 · 方法:tuple(lst) 列表转元组、list(t) 元组转列表
三级 · 骨架:t = ____(lst) / lst2 = ____(t2)
1# 2-52lst = [1, 2, 3, 4, 5]3t = tuple(lst)4print(f"列表转元组: {t}") # (1, 2, 3, 4, 5)5
6t2 = (6, 7, 8)7lst2 = list(t2)8print(f"元组转列表: {lst2}") # [6, 7, 8] 2-6 元组遍历与删除
创建文件 test_iter.py,完成以下操作:
t = (10, 20, 30, 40, 50)for 循环遍历打印每个元素in 判断 30 是否在元组中del 删除整个元组,观察结果批改(2026-09-28):✅ 正确(for 循环逐个打印 10~50、
30 in t输出 True、del t已执行);你是一行一个数字,参考答案用print(x, end=" ")挤在同一行,题面只要求”遍历打印每个元素”。
一级 · 思路:遍历就是用循环把元素一个个取出来打印;判断在不在用成员运算符;元组里的元素删不掉,但可以整个把元组删掉(删完再访问就会报错)
二级 · 方法:for x in t: 逐个遍历;30 in t 判断在不在;del t 删除整个元组
三级 · 骨架:for x in ____: / print(f"30是否在元组中: {30 ____ t}") / ____ t
1# 2-62t = (10, 20, 30, 40, 50)3
4# for 循环遍历5for x in t:6 print(x, end=" ") # 10 20 30 40 507print()8
9# in 判断10print(f"30是否在元组中: {30 in t}") # True11
12# del 删除13del t14# print(t) # 报错:NameError: name 't' is not defined 2-7 元组不可变性验证
创建文件 test_immut.py,完成以下操作:
t = (1, 2, 3)t[0] = 10,观察报错信息id() 查看修改前后元组的内存地址批改(2026-09-28):⚠️
t = (1, 2, 3)和两次id()都对(实测地址2630688678976→2630688670400,重新赋值后确实是新对象),但修改那行# t[0]=10是注释掉的,没有实际跑过、也没记下报错信息;把注释去掉会得到TypeError: 'tuple' object does not support item assignment。
一级 · 思路:元组的元素不能改,那一行真的跑起来会直接报错,把报错信息记下来;想制造”改动后”的样子只能整个重新赋值,再用内存地址验证它已经是另一个对象
二级 · 方法:t[0] = 10 会抛 TypeError: 'tuple' object does not support item assignment;看内存地址用 id(t)
三级 · 骨架:# t[0] = 10(去掉注释运行看报错)/ print(f"修改前地址: {____(t)}") / t = (10, 2, 3)(整个重新赋值)
1# 2-72t = (1, 2, 3)3print(f"修改前: {t}")4print(f"修改前地址: {id(t)}")5
6# 尝试修改会报错:TypeError: 'tuple' object does not support item assignment7# t[0] = 108
9t = (10, 2, 3) # 重新赋值10print(f"重新赋值后: {t}")11print(f"重新赋值后地址: {id(t)}") # 地址不同,是新对象如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


