
元组是什么元组和列表非常像都是可以存放多个数据的容器。唯一的区别是元组一旦创建就不能修改。在 Python 里元组用圆括号()表示# 列表用方括号 fruits_list [苹果, 香蕉, 橙子] # 元组用圆括号 fruits_tuple (苹果, 香蕉, 橙子)元组可以像列表一样通过下标获取数据days (周一, 周二, 周三, 周四, 周五, 周六, 周日) print(days[0]) # 周一 print(days[-1]) # 周日但你不能修改它days (周一, 周二, 周三) days[0] 星期日 # 报错元组不支持修改二、一个我踩过的坑单元素元组这个是新手很容易犯的错误。# 我想创建一个只有一个元素的元组 t (hello) print(type(t)) # class str 竟然是字符串你可能会想我明明写了圆括号为什么是字符串因为括号本身不是元组的标志逗号 , 才是。 (hello) 只是把字符串括起来了所以类型还是字符串。加上逗号 (hello,) 后Python 才知道这是一个元组,举个例子t (hello,) # 注意这个逗号 print(type(t)) # class tuple记住单元素元组必须加逗号。这个坑我一开始也踩过后来记住了一条只要想创建元组就在末尾加个逗号习惯之后就不会出错了。三、元组的不可变性元组的不可变体现在不能增加、不能删除、不能修改元素。但需要注意的是如果元组里存的是列表这种可变对象列表本身还是可以被修改的t (苹果, [香蕉, 橙子]) t[1].append(葡萄) # 可以修改列表 print(t) # (苹果, [香蕉, 橙子, 葡萄])列表可以改、元组不能改:days (周一, 周二, 周三) days[0] 星期日 # 报错tuple object does not support item assignment这有点绕但记住一句话就行元组不可变指的是元组本身的结构不变不能增删改元素但不限制元素内部的变化。四、什么时候用元组场景推荐用原因一周七天、一年十二个月元组固定不变用元组更安全函数返回多个值元组Python函数返回多个值时默认就是元组字典的键元组列表不能作为字典的键元组可以需要频繁增删改的数据列表元组不能修改五、切片截取序列的一部分切片可以让你从一个序列字符串、列表、元组中截取一部分。基本语法序列[起始下标:结束下标:步长]注意切片是左闭右开的——包含起始下标不包含结束下标。1.基本切片fruits [苹果, 香蕉, 橙子, 葡萄, 西瓜] # 从下标0取到下标3不包含3 print(fruits[0:3]) # [苹果, 香蕉, 橙子] # 从下标1取到下标4不包含4 print(fruits[1:4]) # [香蕉, 橙子, 葡萄] # 从开头取到下标3不包含3 print(fruits[:3]) # [苹果, 香蕉, 橙子] # 从下标2取到末尾 print(fruits[2:]) # [橙子, 葡萄, 西瓜]注意在元组上切片的写法完全一样days (周一, 周二, 周三, 周四, 周五) print(days[1:4]) # (周二, 周三, 周四)2.步长numbers [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 从0到9步长为2隔一个取一个 print(numbers[0:10:2]) # [0, 2, 4, 6, 8] # 从1到9步长为2 print(numbers[1:10:2]) # [1, 3, 5, 7, 9]3.负步长反转序列numbers [0, 1, 2, 3, 4, 5] # 步长为负数从右往左取 print(numbers[::-1]) # [5, 4, 3, 2, 1, 0] print(numbers[4:1:-1]) # [4, 3, 2][::-1]是一个非常常用的写法用来快速反转一个序列。六、字符串切片字符串也可以切片因为字符串本质上也是序列举个例子text Hello World print(text[0:5]) # Hello print(text[6:]) # World print(text[::-1]) # dlroW olleH反转字符串七、一个我踩过的坑切片下标越界不报错列表下标越界会报错但切片不会fruits [苹果, 香蕉, 橙子] print(fruits[0:100]) # [苹果, 香蕉, 橙子]不报错切片会自动忽略超出范围的索引不会报错。这个特性有时候很方便但如果你的切片结果为空却没有报错可能会让调试变得困难。用切片的时候心里有数就行——如果你发现切片结果比预期短可以检查一下是不是下标写超了。八、综合示例学生成绩分析把今天学的东西串起来# 用元组存学生姓名固定名单不能修改 students (张三, 李四, 王五, 赵六, 孙七) # 用列表存成绩可以增删改 scores [85, 92, 78, 96, 88] print( 学生成绩表 ) for i in range(len(students)): print(f{students[i]}{scores[i]}分) # 用切片取出前三名 top_three scores[:3] print(f\n前三名成绩{top_three}) # 用切片反转查看倒数排名 scores_reversed scores[::-1] print(f倒序排名成绩{scores_reversed}) # 字符串切片提取信息 student_info 2024001-张三-85 student_id student_info[0:7] # 2024001 name student_info[8:10] # 张三 score student_info[11:] # 85 print(f\n学号{student_id}姓名{name}成绩{score}分)运行结果 学生成绩表 张三85分 李四92分 王五78分 赵六96分 孙七88分 前三名成绩[85, 92, 78] 倒序排名成绩[88, 96, 78, 92, 85] 学号2024001姓名张三成绩85分小结今天学的东西整理成一张速查表知识点说明示例定义元组用 () 包裹数据t (苹果, 香蕉)单元素元组必须加逗号t (hello,)元组不可变不能增删改t[0] a → 报错列表 vs 元组可变 vs 不可变列表可修改元组不可切片截取序列的一部分fruits[0:3][::-1]反转序列numbers[::-1]字符串切片字符串也是序列text[0:5]什么时候用元组什么时候用列表