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

python系列之元组(Tuple)

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。

python系列之元组(Turple)

  • 一、元组是什么?——给新手的直观理解
    • 1、元组的定义
    • 2、举个生活例子🌰
  • 二、元组的4大核心特性(对比列表更清晰)
  • 三、元组的6种高频操作
    • 1. 创建元组的3种方式
    • 2. 访问元素:像查字典一样简单
    • 3. 元组的不可变性(新手必踩的坑!)
    • 4. 元组解包:一键拆解数据
    • 5. 元组与列表的互转
    • 6. 内置方法:虽然少但精悍
  • 四、元组的5大实际应用场景
    • 场景1:函数返回多个值
    • 场景2:数据库记录存储
    • 场景3:作为字典的键(列表不行!)
    • 场景4:保护重要配置项
    • 场景5:交换变量值(一行代码搞定)
  • 五、进阶技巧:星号解包
  • 六、常见问题解答(QA)
  • 七、总结:元组使用口诀
  • 八、下章预告


一、元组是什么?——给新手的直观理解

1、元组的定义

元组(Tuple)是Python中一种不可变的、有序的数据容器,用圆括号 () 包裹元素,元素之间用逗号分隔。

2、举个生活例子🌰

想象一个快递柜的储物格编号系统:
每个储物格的位置由 (行号, 列号, 层号) 三个固定数字组成,一旦确定就不能修改。这就像元组的特点——创建后内容不可变

# 创建快递柜位置元组
locker_position = (2, 5, 3)  # 2行5列3层

二、元组的4大核心特性(对比列表更清晰)

特性元组(Tuple)列表(List)
可变性❌ 不可变(安全)✅ 可变(灵活)
语法符号()[]
性能内存占用小,访问速度快内存占用较大
适用场景固定数据(如配置项、坐标)动态数据(如购物车商品列表)

三、元组的6种高频操作

1. 创建元组的3种方式

# 方式1:直接赋值
colors = ("red", "green", "blue")# 方式2:逗号决定(即使单个元素)
single_item = ("apple",)  # 注意逗号!# 方式3:tuple()转换 列表转元组
numbers = tuple([1, 2, 3])  # 输出:(1,2,3)

2. 访问元素:像查字典一样简单

# 正序索引(从0开始)
week_days = ("Mon", "Tue", "Wed", "Thu", "Fri")
print(week_days[0])  # 输出:Mon# 反向索引(-1为最后一个)
print(week_days[-1]) # 输出:Fri# 切片操作(左闭右开,即左边包含,右边不包含)
print(week_days[1:3])  # 输出:('Tue', 'Wed')

3. 元组的不可变性(新手必踩的坑!)

# 尝试修改元组元素会报错!
coordinates = (10, 20)
coordinates[0] = 15  # ❌ 报错:TypeError: 'tuple' object does not support item assignment

4. 元组解包:一键拆解数据

# 用户信息元组
user_data = ("Alice", 28, "alice@example.com")# 解包赋值
name, age, email = user_data
print(f"姓名:{name}, 年龄:{age}")  # 姓名:Alice, 年龄:28

运行结果:
运行结果
【注意】解包赋值左边变量名的数量必须有右边定义内的元素数量一致,不然会报:ValueError,如同:
报错信息

5. 元组与列表的互转

# 列表转元组(冻结数据)
shopping_list = ["牛奶", "面包", "鸡蛋"]
fixed_list = tuple(shopping_list)
print('列表转元组:', fixed_list)# 元组转列表(解冻修改)
config = ("UTF-8", 8080, True)
temp_list = list(config)
print('元组转列表:', temp_list)
# 数据修改
temp_list[1] = 8000
new_config = tuple(temp_list)
print('列表修改再转元组:', new_config)

运行结果:
列表与元组的互换

6. 内置方法:虽然少但精悍

# count()统计元素出现次数
grades = (85, 90, 78, 90, 90)
print(grades.count(90))  # 输出:3# index()查找元素位置
print(grades.index(78))  # 输出:2(索引从0开始)

四、元组的5大实际应用场景

场景1:函数返回多个值

# 定义一个函数
def calculate_stats(data):# 调用内置函数min_val = min(data)max_val = max(data)avg_val = sum(data)/len(data)return (min_val, max_val, avg_val)  # 打包返回# 调用函数,参数:元组
results = calculate_stats((5, 2, 8, 4))
print(f"最小值:{results[0]}")  # 最小值:2

运行结果:
运行结果

场景2:数据库记录存储

# 用户表的一条记录(不可变保证数据安全)
user_record = (1001, "张三", "1990-05-15", ("北京市", "海淀区", "中关村大街1号")
)
print(user_record[3][0])  # 输出:北京市

场景3:作为字典的键(列表不行!)

# 用坐标作为字典键
location_data = {(35.6895, 139.6917): "东京",(40.7128, -74.0060): "纽约"
}
# 键查询
print(location_data[(35.6895, 139.6917)])  # 输出:东京

运行结果:
运行结果

场景4:保护重要配置项

# 网站基础配置(防止意外修改)
SITE_CONFIG = ("https://www.example.com","UTF-8",300  # 超时时间(秒)
)

场景5:交换变量值(一行代码搞定)

a = 10
b = 20
a, b = b, a  # 本质是元组解包
print(a)  # 20
print(b)  # 10

五、进阶技巧:星号解包

在第三节的第4点中:元组解包,出现了一个异常信息:
异常信息
这个原因上面已经说明,是因为赋值的参数不对。而有时候在一堆数据里,不需要那么多的解包,只需要其中几个数据即可,那么接下来的星号解包可以满足该需求。

# 提取首尾元素,中间打包
nums = (1, 2, 3, 4, 5)
first, *middle, last = nums
print(first)   # 1
print(middle)  # [2, 3, 4](自动转为列表)
print(last)    # 5

运行结果:
运行结果


六、常见问题解答(QA)

Q:元组真的完全不可变吗?
A:元组内的直接元素不可变,但如果元素是可变对象(如列表),其内容可以修改:

mixed_tuple = (1, [2, 3], "hello")
mixed_tuple[1].append(4)  # ✅ 合法操作
print(mixed_tuple)  # (1, [2, 3, 4], 'hello')

Q:什么时候该用元组而不是列表?
A:遵循以下原则:

  • 数据不需要修改时 → 用元组(更安全高效)
  • 需要哈希(作为字典键) → 必须用元组
  • 多返回值传递 → 首选元组打包

七、总结:元组使用口诀

圆括号包裹不可变,
数据安全效率见。
多值返回做字典键,
解包操作最方便!

通过本文的学习,你已经掌握了元组的核心用法。接下来可以尝试:

  1. 用元组存储游戏中的固定地图坐标
  2. 编写返回多个状态码的函数
  3. 创建包含嵌套元组的配置字典

八、下章预告

python容器有:字符串、列表、元组、字典和集合,所以下一章—— 字典,集合最后讲。

相关文章:

python系列之元组(Tuple)

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。 python系列之元组(Turple) 一、元组是什么?——给新手的…...

破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程

破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程 引言 免责声明: 本文提供的信息仅供参考,不承担因操作产生的任何损失。读者需自行判断内容适用性,并遵守法律法规。作者不鼓励非法行为,保…...

批量删除 PPT 中的所有图片、某张指定图片或者所有二维码图片

PPT 文档中的图片如何删除呢?相信很多小伙伴或碰到类似的需求。比如我们需要删除 PPT 文档中的某一张图片或者某张二维码图片,如果每一页都有这张图片,或者有很多 ppt 都有同一张要删除的图片,我们应该怎么快速的完成删除呢&#…...

大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统

LoRA项目——新媒体评论智能分类与信息抽取系统 0 前言1 项目介绍1.1 项目功能1.2 技术原理1.3 软硬件环境1.4 项目结构 2 数据介绍与处理2.1 数据集介绍2.2 数据处理2.3 数据导入器 3 模型训练3.1 配置文件3.2 工具函数3.3 模型训练3.4 模型评估 4 模型推理 0 前言 微调里面&…...

mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)

我们应该清楚行记录是放在页中的。 compact行记录格式: 主要介绍几个比较重要的参数 heap_no: 页号 record_type: 0 表示普通类型(叶子结点),1表示B树的非叶子节点 ,2 表示最小记录&#xff…...

MySQL 进阶学习文档

一、存储引擎 1.1 核心架构 四层架构:连接层 → 服务层 → 引擎层 → 存储层插件式存储引擎:不同引擎独立管理数据存储,可动态选择 1.2 主流引擎对比 特性InnoDB(默认)MyISAMMemory事务支持✅ 支持❌ 不支持❌ 不支…...

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比,上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …...

Vmware中的centos7连接上网

有很多刚刚开始配置了centos7,然后发现不能上网现在来解决这个问题。 测试能不能上网 先还原这个设置,如果没有动过的话就不用,连接模式是NAT模式 然后进去设置网络环境,记得是用超级用户设置 vi /etc/sysconfig/network-script…...

【AI知识】常见的优化器及其原理:梯度下降、动量梯度下降、AdaGrad、RMSProp、Adam、AdamW

常见的优化器 梯度下降(Gradient Descent, GD)局部最小值、全局最小值和鞍点凸函数和非凸函数动量梯度下降(Momentum)自适应学习率优化器AdaGrad(Adaptive Gradient Algorithm)​RMSProp(Root M…...

线性规划的标准形式

标准形式的定义 目标函数:最大化线性目标函数 其中,x 是决策变量向量,c 是目标系数向量。 约束条件:等式形式约束 A x b, 其中,A 是约束系数矩阵,b 是常数项向量。 变量非负约束: 。 因此…...

网络安全应急入门到实战

奇安信:95015网络安全应急响应分析报告(2022-2024年)官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…...

应用程序安全趋势:左移安全、人工智能和开源恶意软件

软件是大多数行业业务运营的核心,这意味着应用程序安全从未如此重要。 随着组织采用云原生架构、微服务和开源组件,攻击面不断扩大。结果是:攻击者渴望利用的易受攻击和恶意依赖项数量不断增加。 2025 年,安全团队将面临日益复杂…...

ospf动态路由

一、为什么使用动态路由 OSPF(open shortest path first开放最短路径优先)是内部网关协议(IGP)的一种,基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2),核心重点协议 OSPF共三个版本,OSPFV1主要是实验室…...

【视频】OrinNX+Ubuntu20.04:移植OpenCV-4.11.0 with CUDA(含opencv_contrib )

1、源码下载 github下载地址如下,选择最新版本4.11 https://github.com/opencv/opencv/releases/tag/4.11.0 https://github.com/opencv/opencv_contrib/releases/tag/4.11.02、安装依赖库 1)对图片编码格式的支持 sudo apt install zlib1g-dev libjpeg8-dev libwebp-dev…...

基于单片机控制的电动汽车双闭环调速系统(论文+源码)

2.1系统方案 在本次设计中,其系统整个框图如下图3.1所示,其主要的核心控制模块由电源供电模块,晶振电路,驱动电路模块,霍尔传感器,按键模块,复位电路,LCD液晶显示及直流电机等组成。…...

【病毒分析】伪造微软官网+勒索加密+支付威胁,CTF中勒索病毒解密题目真实还原!

1.背景 该CTF挑战题目完整复现了黑客的攻击链路,攻击者通过伪造钓鱼页面引导受害者下载恶意软件。用户访问伪造的 Microsoft 365 官网后,在点击“Windows Installer (64-bit)”下载选项时,页面会自动跳转至伪造的 GitHub 项目链接&#xff0…...

PDF Reader Pro for Mac v4.9.0 PDF编辑/批注/OCR/转换工具 支持M、Intel芯片

PDF Reader Pro 是一款用户必备的集管理、编辑、转换、阅读功能于一体的专业的全能PDF阅读专家。快速、易用、强大,让您出色完成 PDF 工作。 应用介绍 PDF Reader Pro,一款功能齐全且强大的PDF阅读和编辑软件。支持PDF阅读、批注、PDF编辑、PDF格式转换…...

神经网络中层与层之间的关联

目录 1. 层与层之间的核心关联:数据流动与参数传递 1.1 数据流动(Forward Propagation) 1.2 参数传递(Backward Propagation) 2. 常见层与层之间的关联模式 2.1 典型全连接网络(如手写数字分类&#xf…...

PowerShell 美化 增强教程

PowerShell Windows Terminal 美化 & 增强教程 Windows Terminal PowerShell 默认外观和功能较为基础,但通过 Oh My Posh 及其他增强工具,你可以打造一个更美观、更高效的终端环境。本教程提供完整的安装、美化和优化步骤,包括常见问题…...

机械革命蛟龙16pro玩游戏闪屏

我查过原因,好像是AMD显卡对游戏用了可变刷新率就出bug了,可能是那个游戏不适合用可变刷新率技术。 解决办法: 1.桌面右键鼠标,出现如下标签,点击AMD Software:Adrenalin Edition 2.选择闪屏的游戏&#x…...

《AI赋能云原生区块链,引领供应链溯源革新》

在数字化浪潮席卷全球的当下,供应链管理领域正经历着深刻变革。云原生区块链凭借其去中心化、不可篡改等特性,为供应链溯源带来了前所未有的透明度与可靠性。而AI的融入,更如虎添翼,以强大的智能分析和决策能力,为云原…...

练习题:94

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 while 循环: 获取用户输入: 判断输入内容: 使用 break 语句: 处理非 "quit" 输入: 循环结束后的操作&am…...

实现图片多种处理需求的实用工具

在自媒体创作与日常办公时,图片处理常让人焦头烂额。今天就给大家介绍一款得力帮手——Fotosizer,它能帮你轻松批量处理图片,满足多样化需求。Fotosizer是一款功能强大的图片批量处理软件,无需安装,打开即用&#xff0…...

数据结构中的引用管理对象体系

数据结构中的引用管理对象体系 (注:似复刻变量即实例对象) 引用管理对象的,有引用就能管理到它所指向的对象,我们拿引用最终的目的就是管理那些我们需要管理的最终直接对象,引用也是对象,同时…...

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…...

qyqt5项目打包成应用程序后,adb命令无效

问题:在Pycharm中执行以下代码能正常输出版本信息,但是使用pyinstaller 打包成pkg之后,运行软件一直都输出不了信息 version_info os.popen(f"adb version").read()解决方案: 配置adb 路径 adb_path os.getenv(ADB_…...

关于Docker是否被淘汰虚拟机实现连接虚拟专用网络Ubuntu 22.04 LTS部署Harbor仓库全流程

1.今天的第一个主题: 第一个主题是关于Docker是否真的被K8S弃用,还是可以继续兼容,因为我们知道在去年的时候,由于不可控的原因,docker的所有国内镜像源都被Ban了,再加上K8S自从V1.20之后,宣布…...

深入解析 `SQL_SMALL_RESULT`:MySQL 的“小优化”大作用

深入解析 SQL_SMALL_RESULT:MySQL 的“小优化”大作用 在 MySQL 的查询优化工具箱中,SQL_SMALL_RESULT 是一个容易被忽略但可能带来小幅性能提升的关键字。它适用于特定场景,尤其是涉及 GROUP BY 或 DISTINCT 计算的小数据集查询。本文将深入…...

RG-S3760应用协议配置

RG-S3760应用协议配置 1. dhcp 服务配置 提问:如何在设备上开启dhcp 服务,让不同VLAN 下的电脑获得相应的IP 地址? 回答: 步骤一:配置VLAN 网关IP 地址,及将相关端口划入相应的VLAN 中 S3760#con t S…...

Vue3 界面设计插件 microi-pageengine 入门教程一

系列文章目录 一、Vue3空项目快速集成 microi-pageengine 插件 文章目录 系列文章目录一、前言二、排版布局2.1 功能导航区2.2 组件容器区2.3 属性面板区 三、数据来源配置3.1 json数据源3.2 html数据源 四、事件穿透五、数据保存持久化六、总结 一、前言 上一篇文章介绍了 v…...