当前位置: 首页 > news >正文

Python 编程 - 元组(tuple)

在 Python 3 中,元组(Tuple)是一个不可变的有序元素序列。它是 Python 最基础的数据结构之一,与列表(List)齐名,但核心区别在于创建后不可修改

以下是关于 Python 3 元组最全面的知识点总结,包含大量实用示例:

1. 创建元组

  • 标准语法:使用圆括号 (),元素用逗号隔开。
  • 关键陷阱(单元素元组):必须加尾随逗号,否则 Python 会把它当作普通运算优先级括号。
  • 省略括号:逗号才是元组的真正定义者。
# 空元组
t1 = ()# 多元素
t2 = (1, 2, 3)# 重要:单元素元组(必须加逗号)
t3 = (5,)      # 类型为 <class 'tuple'>
t4 = (5)       # 类型为 <class 'int'>,只是整数5# 省略括号(逗号是关键)
t5 = 1, 2, 3   # 结果 (1, 2, 3)

2. 核心特性:不可变性(Immutable)

这是元组与列表最本质的区别。 一旦创建,你不能增删改其中的元素。

t = (1, 2, 3)
# t[0] = 100  # 会抛出 TypeError: 'tuple' object does not support item assignment

注意:如果元组内的元素是可变对象(如列表),该列表本身可以修改,但元组对该列表的引用(内存地址)不可变。

t = (1, [2, 3])
t[1].append(4)  # 合法!t 变成 (1, [2, 3, 4])

3. 访问与操作

  • 索引:支持正向(0开始)和反向(-1开始)。
  • 切片:返回新的元组。
  • 拼接与重复+*(注意会生成新对象)。
  • 成员检查in / not in
t = (10, 20, 30, 40, 50)
print(t[1])     # 20
print(t[-1])    # 50
print(t[1:4])   # (20, 30, 40)
print(t + (60,)) # (10, 20, 30, 40, 50, 60)
print(20 in t)  # True

4. 内置方法(仅 2 个)

由于不可变,元组的方法极少:

方法 说明
count(x) 统计元素 x 在元组中出现的次数
index(x) 查找元素 x 首次出现的索引(不存在则抛出 ValueError
t = (1, 2, 2, 3)
print(t.count(2))  # 2
print(t.index(3))  # 3

5. 元组打包与解包(核心语法糖)

  • 打包:将多个值赋给一个元组变量。
  • 解包:将元组元素赋值给多个变量。
  • 星号表达式(Python 3 特有):*rest 可以收集剩余元素。
# 打包
data = "Alice", 25, "Engineer"# 解包(变量数量必须匹配)
name, age, job = data
print(name)  # Alice# 星号解包(匹配任意长度)
first, *middle, last = (1, 2, 3, 4, 5)
print(first)   # 1
print(middle)  # [2, 3, 4] (注意:结果是列表)
print(last)    # 5

6. 为什么使用元组?(与列表对比)

特性 元组 (Tuple) 列表 (List)
可变性 不可变(线程安全,数据稳定) 可变
内存占用 更小(Python 解释器会做内存优化) 较大
执行速度 创建和访问稍快 稍慢
使用场景 字典的键(Key)、函数返回多值、配置常量 动态数据集合
哈希性 若内部元素均可哈希,则元组本身可哈希 不可哈希,不能作为字典键
# 元组可作为字典键,列表不行
d = {("lat", "lon"): 100}  # 合法
# d = {["lat", "lon"]: 100}  # TypeError

7. 命名元组(NamedTuple)—— 进阶必备

Python 3 的 collections.namedtuple 可以创建带有字段名的元组,兼顾元组的轻量性和类的可读性。Python 3.7+ 还支持类型注解。

from collections import namedtuple# 定义一个名为 Point 的元组类
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)print(p.x)    # 10(支持属性访问)
print(p[0])   # 10(支持索引访问)
print(p)      # Point(x=10, y=20)

8. Python 3.11+ 最新特性(类型提示)

在 Python 3.9+ 中,tuple 可以直接用于泛型类型提示;Python 3.11 优化了元组的解包性能。

# 类型注解(Python 3.9+)
def get_user() -> tuple[str, int]:return ("Bob", 30)

💡 最佳实践建议

  • 当数据不需要修改时,优先使用元组(更安全、更高效)。
  • 利用解包交换变量:a, b = b, a(底层就是元组打包与解包)。
  • 函数返回多个值时,默认就是元组,可以直接解包接收。
http://www.jsqmd.com/news/1049581/

相关文章:

  • 2026年最新手机去水印方法,无需软件在线搞定 - 工具软件使用方法推荐
  • 2026年6月连云港黄金回收全攻略:各区正规实体店地址汇总、避坑指南、靠谱无套路连锁品牌推荐 - 天天生活分享日志
  • StatsPAI 深度研究报告
  • 2026年6月市场可靠的防爆电加热器源头厂家推荐,轴封电加热器/电加热器/翅片加热管,防爆电加热器厂家哪家好 - 品牌推荐师
  • 2026 年枣庄市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • 手机电脑端图片去水印教程,2026免费工具推荐实测有效 - 工具软件使用方法推荐
  • 2026洛阳二手包包回收指南洛龙毓典寄卖行十年连锁全城上门变现 - 资讯速览
  • 2026 年济宁市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • 户内隔离手车生产厂家排行榜:2026年选购指南与实操建议在电力配电系统中,户内隔离手车作为开关柜的关键部件,直接影响设备安全与运维效率。 - 资讯速览
  • StardewXnbHack终极指南:3步解锁《星露谷物语》全部游戏资源
  • 银河麒麟部署DeepSeek实战:信创AI落地的编译、适配与运维
  • 2026 年济南市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • 2026 想在东莞出闲置翡翠?正规靠谱回收渠道专业鉴定准 - 薛定谔的梨花猫
  • 跨省寄电瓶车多少钱?2026收费陷阱全曝光 - 快递物流资讯
  • 手机端去水印三步走,实测简单又干净 - 工具软件使用方法推荐
  • 2026年扬州全屋定制双板材官方授权门店盘点,这几家真的值得去看看 - 设计本
  • 图片去水印不用花钱,2026年这3个免费工具真香 - 工具软件使用方法推荐
  • 免安装去水印方法,微信里打开就能用 - 工具软件使用方法推荐
  • 2026年6月新鲜动向|亨得利欧米茄联保档案登记办理入口公开,附全国联保网点与保养细则 - 亨得利官方售后
  • 2026 年宜春市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • Sunshine游戏串流完全指南:5步打造你的私人游戏云服务器
  • 手机电脑端图片去水印工具推荐,高清无损保留原画质 - 工具软件使用方法推荐
  • 佛山精装房改造售后服务哪家好?2026年本地服务品牌推荐 - 优家闲谈
  • 学生证丢了登报声明怎么线上办理?正规登报步骤大全 - 资讯速览
  • 2026年6月有名的铝合金批发厂家有哪些,全铝整装/阳台柜/铝合金/铝合金墙板/铝合金鞋柜/衣柜,铝合金定制找哪家 - 品牌推荐师
  • 闲置世纪联华购物卡回收指南:避坑+渠道+报价 - 京顺回收
  • 抖音视频去水印保存到相册,2026年这招一分钟学会 - 工具软件使用方法推荐
  • 注销公告登报怎么线上办理?2026这样简单又省心 - 资讯速览
  • 嵌入式GUI开发:GUIDRV_SPage驱动配置与性能优化实战
  • 题目集四到六的总结