跟着NOAI考纲学Python,学完就能考,第10课
每天一个知识点,带你自学NOAI,加入我们吧~
前面学了列表和字典,都可以随时增删改。但有些数据你不想让它被改动——比如一周有7天,这个不会变。这节课学元组——长得像列表,但一旦创建就不能修改。
创建元组
用小括号 () 创建元组:
days = ("周一", "周二", "周三") |
('周一', '周二', '周三')
<class 'tuple'>
(3, 5)
列表用方括号 [],元组用圆括号 ()。其实不加括号也行:
t = 1, 2, 3 |
(1, 2, 3)
<class 'tuple'>
逗号才是关键。Python看到逗号就知道这是元组。
访问元素
取值方式和列表完全一样,用索引:
days = ("周一", "周二", "周三", "周四", "周五") |
周一
周五
('周二', '周三')
索引、负索引、切片,和列表用法一模一样。切片出来的还是元组。
元组不能改
这是元组和列表最大的区别。试着改一下:
days = ("周一", "周二", "周三") |
TypeError: 'tuple' object does not support item assignment
直接报错。元组一旦创建,不能增、不能删、不能改。这就是它和列表的核心区别。
列表像白板,随时可以擦了重写。元组像刻在石头上的字,刻完就改不了了。
元组解包
元组有个很好用的功能叫解包——把元组里的值一次性拆开赋给多个变量:
point = (3, 5) |
x = 3
y = 5
一行搞定,不用写 x = point[0]、y = point[1] 两行。
解包还有个经典用法——交换两个变量的值:
a = 10 |
a = 20
b = 10
不用借助第三个变量,Python自动帮你处理。底层原理就是元组解包。
什么时候用元组
既然列表能做的更多,为什么还要元组?因为有些数据本来就不该改:
• 坐标 (3, 5)——坐标不会自己变
• 颜色 (255, 0, 0)——红色就是红色
• 函数返回多个值——用元组打包交回来
看个函数返回元组的例子:
def min_max(numbers): |
(45, 92)
最小值: 45
最大值: 92
return min(numbers), max(numbers) 返回的就是一个元组。直接用解包拆开,干净利落。
易错点
1. 单元素元组必须加逗号
a = (1) |
<class 'int'>
<class 'tuple'>
(1) 只是数学运算里的括号,Python当成整数1。只有一个元素的元组,必须在元素后面加逗号:(1,)
2. 元组不能改不代表里面的东西都不能改
如果元组里面放了一个列表,列表本身还是可以改的:
t = (1, [2, 3], 4) |
(1, [2, 3, 99], 4)
元组不能改的是"谁在第几个位置",但位置上的东西如果本身可变(比如列表),它自己的内容还是能变的。初学阶段了解即可,实际用到的不多。
动手试试
自己先想,想完了去香农平台上写代码跑一遍验证。
|
练习1:预测输出 下面这段代码运行后,屏幕上会输出什么?
提示:解包就是把元组里的值按顺序拆开。 |
|
练习2:找bug 下面这段代码想往元组里加一个元素,但运行报错了。为什么?
提示:元组和列表最大的区别是什么? |
|
练习3:写代码 写一个函数 min_max(lst),接收一个列表,返回一个元组 (最小值, 最大值)。然后调用它,用解包把结果拆开打印。 提示:函数里可以用 min() 和 max(),return 两个值自动变成元组。 |
去平台上手写代码
学会元组,你知道了Python里"不能改的列表"。回顾一下:
• (元素1, 元素2) — 创建元组
• 索引取值和列表一样 — t[0]、t[-1]、切片都行
• 不能修改 — 增删改都会报错
• a, b = 元组 — 解包,一行拆开赋值
这篇文章讲的是香农NOAI学习平台"Python基础"模块的第十课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。
香农NOAI学习平台
地址:shannon.arpa.school
微信扫码登录就能用,免费。
找到「Python基础」→「元组」,从第一道题开始写。
下一篇讲字符串操作——字符串不只是一串文字,它还能切片、查找、替换,玩法很多。