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

【Python 元组】

Python 中的元组(Tuple)是一种不可变的有序数据集合,用于存储多个元素的序列。与列表(List)类似,但元组一旦创建后无法修改,这种特性使其在特定场景下具有独特优势。


一、核心特性

  1. 不可变性:创建后元素不能增删改
  2. 有序性:元素按插入顺序存储
  3. 允许重复:可存储重复元素
  4. 异构性:可包含不同类型数据
    my_tuple = (1, "apple", 3.14, True)
    

二、创建元组

1. 直接定义
colors = ("red", "green", "blue")
empty_tuple = ()       # 空元组
singleton = (5,)       # 单元素元组(注意逗号)
2. 类型转换
tuple("hello")  # → ('h', 'e', 'l', 'l', 'o')
tuple([1,2,3])  # → (1, 2, 3)

三、常用操作

1. 索引与切片
nums = (10, 20, 30, 40, 50)
nums[0]      # → 10(正向索引,从0开始)
nums[-1]     # → 50(反向索引,从-1开始)
nums[1:4]    # → (20, 30, 40)(切片,左闭右开)
nums[::-1]   # → (50, 40, 30, 20, 10)(逆序)
2. 解包(Unpacking)
point = (3, 4)
x, y = point  # x=3, y=4# 高级解包(Python 3.x+)
a, *b, c = (1, 2, 3, 4, 5)  # a=1, b=[2,3,4], c=5

四、元组方法

元组仅支持以下不可变操作:

t = (1, 2, 2, 3, 3, 3)
t.count(3)    # → 3(统计元素出现次数)
t.index(2)    # → 1(首次出现位置)

五、元组 vs 列表

特性元组(Tuple)列表(List)
可变性不可变可变
性能更快(不可变性优化)较慢
内存占用更小较大
适用场景数据保护、函数返回多值动态数据集合
作为字典键允许不允许

六、高级用法

1. 命名元组(Named Tuple)
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)  # → 3(属性访问)
2. 函数返回多值
def get_stats():return 42, "success", [1,2,3]  # 返回元组result = get_stats()
value, status, data = result  # 解包使用
3. 哈希性应用
key = (1, "apple")  # 元组可作为字典键
my_dict = {key: "fruit"}# 列表不能作为字典键(会报错)
# bad_key = [1, "apple"]

七、性能优化

  1. 内存效率

    import sys
    sys.getsizeof(())       # 空元组 → 48字节
    sys.getsizeof([])       # 空列表 → 72字节
    
  2. 速度优势

    import timeit# 元组访问速度测试
    tuple_time = timeit.timeit('x = (1,2,3); x[1]', number=10000000)# 列表访问速度测试
    list_time = timeit.timeit('x = [1,2,3]; x[1]', number=10000000)print(f"Tuple: {tuple_time:.6f}s")  # 通常更快
    print(f"List:  {list_time:.6f}s")
    

八、常见陷阱

  1. 可变元素陷阱

    t = ([1,2], 3)
    t[0].append(3)  # 元组不可变,但内部列表可修改 → t变为([1,2,3],3)
    
  2. 单元素元组语法

    t1 = (5)      # 错误!实际是整数5
    t2 = (5,)     # 正确!单元素元组
    

九、典型应用场景

  1. 保护数据完整性

    # 配置参数(不应被修改)
    DB_CONFIG = ("localhost", 3306, "admin", "secret")
    
  2. 函数返回多值

    def get_user_info(user_id):return (user_id, "Alice", 25, "alice@example.com")
    
  3. 作为字典键

    cache = {(1, 2): "Result A",(3, 4): "Result B"
    }
    
  4. 格式化字符串

    coords = (3, 4)
    f"坐标:({coords[0]}, {coords[1]})"  # → "坐标:(3, 4)"
    

通过合理使用元组,可以在保证数据安全的同时提升程序性能。选择元组还是列表的关键在于:是否需要修改数据。如果数据在创建后不应被修改,优先使用元组。

相关文章:

【Python 元组】

Python 中的元组(Tuple)是一种不可变的有序数据集合,用于存储多个元素的序列。与列表(List)类似,但元组一旦创建后无法修改,这种特性使其在特定场景下具有独特优势。 一、核心特性 不可变性&am…...

LINUX CFS算法解析

文章目录 1. Linux调度器的发展历程2. CFS设计思想3. CFS核心数据结构3.1 调度实体(sched_entity)3.2 CFS运行队列(cfs_rq)3.3 任务结构体中的调度相关字段 4. 优先级与权重4.1 优先级范围4.2 权重映射表 (prio_to_weight[])优先级计算4.3.1. static_prio (静态优先级)4.3.2. n…...

智能指针笔记

智能指针,利用class类对象销毁的时候自动调用析构函数,去把delete ptr的操作放在析构函数里,去实现自动释放指针里的资源 RAII是ResourceAcquisition Is Initialization的缩写,他是⼀种管理资源的类的设计思想,本质是 …...

软考-软件设计师中级备考 14、刷题 算法

一、考点归纳 1)排序 2、查找 3、复杂度 4、经典问题 0 - 1 背包动态规划0 - 1 背包问题具有最优子结构性质和重叠子问题性质。通过动态规划可以利用一个二维数组来记录子问题的解,避免重复计算,从而高效地求解出背包能装下的最大价值。分…...

Vue3 中 ref 与 reactive 的区别及底层原理详解

一、核心区别 1. 数据类型与使用场景 • ref 可定义基本类型(字符串、数字、布尔值)和对象类型的响应式数据。对于对象类型,ref 内部会自动调用 reactive 将其转换为响应式对象。 语法特点:需通过 .value 访问或修改数据&#…...

豆包:基于多模态交互的智能心理咨询机器人系统设计与效果评估——情感计算框架下的对话机制创新

豆包:基于多模态交互的智能心理咨询机器人系统设计与效果评估——情感计算框架下的对话机制创新 摘要 随着人工智能在心理健康领域的应用深化,本文提出一种融合情感计算与动态对话管理的智能心理咨询机器人系统架构。通过构建“用户状态-情感响应-策略生成”三层模型,结合…...

Baklib实战企业内容与中台管理差异解析

企业内容管理中台本质差异 企业内容管理系统(CMS)与内容中台的核心差异在于战略定位与技术路径的本质性区隔。传统CMS聚焦于内容存储与审批流程的线性管理,而内容中台则构建起全域数据服务中枢,通过API接口实现跨系统内容资产调用…...

通用外设驱动模型(四步法)

举例:GPIO配置步骤 1、使能时钟 __HAL_RCC_GPIOx_CLK_ENABLE()2、设置工作模式 HAL_GPIO_Init()3、设置输出状态(可选) HAL_GPIO_WritePin() HAL_GPIO_TogglePin()4、读取输入状态(可选) HAL_GPIO_ReadPin()模块…...

IoT无线组网模块,万物互联的底层通信基石

随着物联网(IoT)技术在“快车道”上持续飞驰,一场“交互革命”正在人们的日常出行与工作学习等生活场景中加速爆发。从智能家居到智慧城市,从智慧交通到工业自动化,物联网(IoT)技术凭借着万物互…...

Xterminal(或 X Terminal)通常指一类现代化的终端工具 工具介绍

Xterminal(或 X Terminal)通常指一类现代化的终端工具,旨在为开发者、运维人员提供更高效、更智能的命令行操作体验。 📢提示:文章排版原因,资源链接地址放在文章结尾👇👇&#xff…...

OpenCV 中用于支持 华为昇腾(Ascend)AI 芯片后端 的模块CANN

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cannops 是 OpenCV 中用于支持 华为昇腾(Ascend)AI 芯片后端 的模块,全称为 CANN Operations (CANN Operator…...

learning ray之ray强化学习/超参调优和数据处理

之前我们掌握了Ray Core的基本编程,我们已经学会了如何使用Ray API。现在,让我们将这些知识应用到一个更实际的场景中——构建一个强化学习项目,并且利用Ray来加速它。 我们的目标是,通过Ray的任务和Actor,将一个简单…...

【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理

目录 1、理解硬件 (1)磁盘 (2)磁盘的物理结构 (3)磁盘的存储结构 (4)磁盘的逻辑结构 (5)CHS && LBA地址 2、引入文件系统 (1&…...

基于 Ubuntu 24.04 部署 WebDAV

无域名,HTTP 1. 简介 WebDAV(Web Distributed Authoring and Versioning)是一种基于 HTTP 的协议,允许用户通过网络直接编辑和管理服务器上的文件。本教程介绍如何在 Ubuntu 24.04 上使用 Apache2 搭建 WebDAV 服务,无…...

人工智能基础知识笔记八:数据预处理

1、简介 在进行数据分析之前,数据预处理是一个至关重要的步骤。它包括了数据清洗、转换和特征工程等过程,以确保数据的质量并提高模型的性能。数据预处理是机器学习和数据分析中至关重要的步骤,其中分类变量的编码是核心任务之一。本文…...

tauri-plugin-store 这个插件将数据存在本地电脑哪个位置

tauri-plugin-store 插件用于在 Tauri 应用中以键值对形式持久化存储数据。它将数据存储在用户本地电脑的一个 JSON 文件中,具体路径取决于操作系统,并且通常位于操作系统的应用数据目录中。 默认存储位置 以默认配置为例(使用 default sto…...

一场陟遐自迩的 SwiftUI + CoreData 性能优化之旅(下)

概述 自从 SwiftUI 诞生那天起,我们秃头码农们就仿佛打开了一个全新的撸码世界,再辅以 CoreData 框架的鼎力相助,打造一款持久存储支持的 App 就像探囊取物般的 Easy。 话虽如此,不过 CoreData 虽好,稍不留神也可能会…...

数字人驱动/动画方向最新顶会期刊论文收集整理 | AAAI 2025

会议官方论文列表:https://ojs.aaai.org/index.php/AAAI/issue/view/624 以下论文部分会开源代码,若开源,会在论文原文的摘要下方给出链接。 语音驱动头部动画/其他 EchoMimic: Lifelike Audio-Driven Portrait Animations through Editabl…...

Java+Selenium+快代理实现高效爬虫

目录 一、前言二、Selenium简介三、环境准备四、代码实现4.1 创建WebDriver工厂类4.2 创建爬虫主类4.3 配置代理的注意事项 六、总结与展望 一、前言 在Web爬虫技术中,Selenium作为一款强大的浏览器自动化工具,能够模拟真实用户操作,有效应对…...

数据结构 集合类与复杂度

文章目录 📕1. 集合类📕2. 时间复杂度✏️2.1 时间复杂度✏️2.2 大O渐进表示法✏️2.3 常见的时间复杂度量级✏️2.4 常见时间复杂度计算举例 📕3. 空间复杂度 📕1. 集合类 Java 集合框架(Java Collection Framework…...

Python学习笔记--Django的安装和简单使用(一)

一.简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。Django 提供了一套强大的工具和约定,使得开发者能够快速构建功能齐全且易于维护的网站。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1…...

SecureCRT网络穿透/代理

场景 公司的办公VPN软件只有Windows系统版本,没有Macos系统版本,而日常开发过程中需要先登录VPN后,然后才能登录应用服务器。 目的:Macos系统在使用SecureCRT时,登录服务器,需要走Parallels Desktop进行网络…...

视频添加字幕脚本分享

脚本简介 这是一个给视频添加字幕的脚本,可以方便的在指定的位置给视频添加不同大小、字体、颜色的文本字幕,添加方式可以直接修改脚本中的文本信息,或者可以提前编辑好.srt字幕文件。脚本执行环境:windowsmingwffmpeg。本方法仅…...

OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)

目录 1. Ubuntu中编译 2. NDK环境配置 3. 编译 4. 安装 这部分主要是为了得到libudev(因为原来的libudev已经不更新了),eudev的下载地址如下: https://github.com/gentoo/eudev 相应的代码最好是在Ubuntu中先编译通过&#…...

JavaSE核心知识点02面向对象编程02-04(包和导入)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-04&#…...

【Git】查看tag

文章目录 1. 查看当前提交是否有tag2. 查看最近的tag3. 查看所有tag 有时候需要基于某个tag拉分支,记录下怎么查看tag。 1. 查看当前提交是否有tag git tag --points-at HEAD该命令可直接检查当前提交(HEAD)是否关联了任何tag。 若当前提交…...

华为昇腾910B通过vllm部署InternVL3-8B教程

前言 本文主要借鉴:VLLM部署deepseek,结合自身进行整理 下载模型 from modelscope import snapshot_download model_dir snapshot_download(OpenGVLab/InternVL3-8B, local_dir"xxx/OpenGVLab/InternVL2_5-1B")环境配置 auto-dl上选择单卡…...

upload-labs靶场通关详解:第三关

一、分析源代码 代码注释如下&#xff1a; <?php // 初始化上传状态和消息变量 $is_upload false; $msg null;// 检查是否通过POST方式提交了表单 if (isset($_POST[submit])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名列表…...

星光云720全景VR系统升级版,720全景,360全景,vr全景,720vr全景

星光云720全景VR系统升级版&#xff0c;720全景&#xff0c;360全景&#xff0c;vr全景&#xff0c;720vr全景 星光云全景系统 系统体验地址 https://720.ailemon.cc 星光云全景新版体验地址 全景系统功能简介 基础设置&#xff1a;作品信息&#xff0c;加载样式&#xff…...

第十六节:图像形态学操作-顶帽与黑帽变换

一、引言&#xff1a;形态学操作的视觉魔法 在数字图像处理领域&#xff0c;形态学操作犹如一柄精巧的解剖刀&#xff0c;能够精准地提取图像特征、消除噪声干扰&#xff0c;并增强关键细节。OpenCV作为计算机视觉的瑞士军刀&#xff0c;提供了一套完整的形态学处理工具。在掌…...