跟着NOAI考纲学Python,学完就能考,第10课

跟着NOAI考纲学Python,学完就能考,第10课

本文核心观点
NOAI 自学 Python 系列第 10 课:元组的不可变特性、与列表的对比、元组解包与典型使用场景。

跟着NOAI考纲学Python,学完就能考,第10课

每天一个知识点,带你自学NOAI,加入我们吧~

前面学了列表和字典,都可以随时增删改。但有些数据你不想让它被改动——比如一周有7天,这个不会变。这节课学元组——长得像列表,但一旦创建就不能修改。

创建元组

用小括号 () 创建元组:

days = ("周一""周二""周三")
coords = (35)

print(days)
print(type(days))
print(coords)

('周一', '周二', '周三')
<class 'tuple'>
(3, 5)

列表用方括号 [],元组用圆括号 ()。其实不加括号也行:

t = 123
print(t)
print(type(t))

(1, 2, 3)
<class 'tuple'>

逗号才是关键。Python看到逗号就知道这是元组。

访问元素

取值方式和列表完全一样,用索引:

days = ("周一""周二""周三""周四""周五")

print(days[0])
print(days[-1])
print(days[1:3])

周一
周五
('周二', '周三')

索引、负索引、切片,和列表用法一模一样。切片出来的还是元组。

元组不能改

这是元组和列表最大的区别。试着改一下:

days = ("周一""周二""周三")
days[0] = "Monday"  # 试试修改

TypeError: 'tuple' object does not support item assignment

直接报错。元组一旦创建,不能增、不能删、不能改。这就是它和列表的核心区别。

列表像白板,随时可以擦了重写。元组像刻在石头上的字,刻完就改不了了。

元组解包

元组有个很好用的功能叫解包——把元组里的值一次性拆开赋给多个变量:

point = (35)
xy = point

print("x ="x)
print("y ="y)

x = 3
y = 5

一行搞定,不用写 x = point[0]y = point[1] 两行。

解包还有个经典用法——交换两个变量的值

a = 10
b = 20

ab = ba  # 一行交换

print("a ="a)
print("b ="b)

a = 20
b = 10

不用借助第三个变量,Python自动帮你处理。底层原理就是元组解包。

什么时候用元组

既然列表能做的更多,为什么还要元组?因为有些数据本来就不该改

坐标 (3, 5)——坐标不会自己变

颜色 (255, 0, 0)——红色就是红色

函数返回多个值——用元组打包交回来

看个函数返回元组的例子:

def min_max(numbers):
    return min(numbers), max(numbers)

result = min_max([8845926073])
print(result)

smallestbiggest = min_max([8845926073])
print("最小值:"smallest)
print("最大值:"biggest)

(45, 92)
最小值: 45
最大值: 92

return min(numbers), max(numbers) 返回的就是一个元组。直接用解包拆开,干净利落。

易错点

1. 单元素元组必须加逗号

a = (1)
b = (1,)

print(type(a))
print(type(b))

<class 'int'>
<class 'tuple'>

(1) 只是数学运算里的括号,Python当成整数1。只有一个元素的元组,必须在元素后面加逗号:(1,)

2. 元组不能改不代表里面的东西都不能改

如果元组里面放了一个列表,列表本身还是可以改的:

t = (1, [23], 4)
t[1].append(99)
print(t)

(1, [2, 3, 99], 4)

元组不能改的是"谁在第几个位置",但位置上的东西如果本身可变(比如列表),它自己的内容还是能变的。初学阶段了解即可,实际用到的不多。

动手试试

自己先想,想完了香农平台上写代码跑一遍验证。

练习1:预测输出

下面这段代码运行后,屏幕上会输出什么?

info = ("小明"14"初二")
nameagegrade = info
print(name"今年"age"岁")

提示:解包就是把元组里的值按顺序拆开。

练习2:找bug

下面这段代码想往元组里加一个元素,但运行报错了。为什么?

colors = ("红""绿""蓝")
colors.append("黄")

提示:元组和列表最大的区别是什么?

练习3:写代码

写一个函数 min_max(lst),接收一个列表,返回一个元组 (最小值, 最大值)。然后调用它,用解包把结果拆开打印。

提示:函数里可以用 min() 和 max(),return 两个值自动变成元组。

去平台上手写代码

学会元组,你知道了Python里"不能改的列表"。回顾一下:

(元素1, 元素2) — 创建元组

索引取值和列表一样t[0]t[-1]、切片都行

不能修改 — 增删改都会报错

a, b = 元组 — 解包,一行拆开赋值

这篇文章讲的是香农NOAI学习平台"Python基础"模块的第十课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。

香农NOAI学习平台
地址:shannon.arpa.school
微信扫码登录就能用,免费。
找到「Python基础」→「元组」,从第一道题开始写。

下一篇讲字符串操作——字符串不只是一串文字,它还能切片、查找、替换,玩法很多。

微信二维码

扫码备注【NOAI】加交流群