【Python 元组】

news2025/5/10 8:39:14

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 namedtuple

Point = 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)"
    

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

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

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

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)技术凭借着万物互…

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 服务,无…

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…

数据结构 集合类与复杂度

文章目录 📕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中先编译通过&#…

华为昇腾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;提供了一套完整的形态学处理工具。在掌…