Python元组全面解析:从入门到精通
文章目录
- Python元组全面解析:从入门到精通
- 一、元组的基本概念
- 1. 什么是元组?
- 2. 元组与列表的对比
- 3. 为什么需要元组?
- 二、元组的创建方式
- 1. 基本创建方法
- 2. 其他创建方式
- 三、元组的访问与操作
- 1. 访问元素
- 2. 切片操作
- 3. 元组解包
- 四、元组的属性和方法
- 1. 元组的属性
- 2. 常用方法示例
- 3. 元组不可变性说明
- 五、元组的进阶用法
- 1. 元组作为字典的键
- 2. 元组作为函数返回值
- 3. 命名元组
- 六、元组的性能优势
- 七、常见误区与注意事项
- 八、总结
Python元组全面解析:从入门到精通
元组(Tuple)是Python中一个非常重要的数据类型,它与列表(list)类似,但有一个关键区别:元组是不可变的。本文将用通俗易懂的方式,结合代码示例和图表,全面讲解Python元组的各种知识点。
一、元组的基本概念
1. 什么是元组?
元组是一个有序的、不可变的元素集合,用圆括号()
表示。可以包含任意类型的元素。
# 创建一个元组
my_tuple = (1, "hello", 3.14, True)
print(my_tuple) # 输出: (1, 'hello', 3.14, True)
2. 元组与列表的对比
特性 | 元组(Tuple) | 列表(List) |
---|---|---|
表示符号 | () | [] |
可变性 | 不可变 | 可变 |
性能 | 更快 | 稍慢 |
内存占用 | 更少 | 更多 |
适用场景 | 固定数据 | 可变数据 |
3. 为什么需要元组?
- 安全性:确保数据不会被意外修改
- 性能:处理速度比列表快
- 哈希性:可以作为字典的键(因为不可变)
- 作为函数的返回值:函数可以返回多个值
二、元组的创建方式
1. 基本创建方法
# 使用圆括号
tuple1 = (1, 2, 3)# 不使用括号也可以(但不推荐)
tuple2 = 1, 2, 3# 单个元素的元组(注意逗号)
single_tuple = (42,) # 正确
not_a_tuple = (42) # 错误,这只是一个整数
2. 其他创建方式
# 使用tuple()构造函数
tuple3 = tuple([1, 2, 3]) # 从列表转换
tuple4 = tuple("abc") # 从字符串转换,得到('a', 'b', 'c')# 空元组
empty_tuple = ()
三、元组的访问与操作
1. 访问元素
my_tuple = ('a', 'b', 'c', 'd', 'e')# 索引访问(从0开始)
print(my_tuple[0]) # 输出: 'a'
print(my_tuple[2]) # 输出: 'c'# 负索引(从末尾开始)
print(my_tuple[-1]) # 输出: 'e'
print(my_tuple[-3]) # 输出: 'c'
2. 切片操作
my_tuple = ('a', 'b', 'c', 'd', 'e')# 基本切片
print(my_tuple[1:3]) # 输出: ('b', 'c')
print(my_tuple[:3]) # 输出: ('a', 'b', 'c')
print(my_tuple[2:]) # 输出: ('c', 'd', 'e')# 步长切片
print(my_tuple[::2]) # 输出: ('a', 'c', 'e')
print(my_tuple[::-1]) # 输出: ('e', 'd', 'c', 'b', 'a') 反向
3. 元组解包
# 基本解包
a, b, c = (1, 2, 3)
print(a, b, c) # 输出: 1 2 3# 使用*收集剩余元素
first, *middle, last = (1, 2, 3, 4, 5)
print(first) # 输出: 1
print(middle) # 输出: [2, 3, 4] 注意变成了列表
print(last) # 输出: 5# 交换变量值
x, y = 10, 20
x, y = y, x # 交换x和y的值
四、元组的属性和方法
1. 元组的属性
属性/方法 | 描述 | 示例 |
---|---|---|
len() | 返回元组长度 | len((1,2,3)) → 3 |
count() | 统计元素出现次数 | (1,2,2,3).count(2) → 2 |
index() | 返回元素第一次出现的索引 | (1,2,3,2).index(2) → 1 |
2. 常用方法示例
my_tuple = (1, 2, 2, 3, 4, 2)# count()方法
print(my_tuple.count(2)) # 输出: 3# index()方法
print(my_tuple.index(3)) # 输出: 3
3. 元组不可变性说明
my_tuple = (1, 2, 3)# 尝试修改会报错
my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment# 但可以重新赋值
my_tuple = (4, 5, 6) # 这是创建一个新元组,不是修改
五、元组的进阶用法
1. 元组作为字典的键
# 列表不能作为字典的键,但元组可以
coordinates = {(35.6895, 139.6917): "Tokyo",(40.7128, -74.0060): "New York"
}
print(coordinates[(35.6895, 139.6917)]) # 输出: Tokyo
2. 元组作为函数返回值
def get_user_info():name = "Alice"age = 30country = "USA"return name, age, country # 实际上返回一个元组user_info = get_user_info()
print(user_info) # 输出: ('Alice', 30, 'USA')# 可以直接解包
name, age, country = get_user_info()
3. 命名元组
from collections import namedtuple# 创建一个命名元组类型
Person = namedtuple('Person', ['name', 'age', 'gender'])# 创建实例
alice = Person(name="Alice", age=30, gender="Female")# 访问字段
print(alice.name) # 输出: Alice
print(alice.age) # 输出: 30
print(alice[0]) # 仍然可以使用索引: Alice
六、元组的性能优势
元组比列表更轻量级,因此在以下情况下使用元组更高效:
- 遍历速度更快:元组的遍历比列表快
- 内存占用更少:相同元素数量的元组比列表占用更少内存
- 作为常量使用:不需要修改的数据使用元组更合适
import sys
import timeit# 内存占用比较
list_size = sys.getsizeof([1, 2, 3, 4, 5])
tuple_size = sys.getsizeof((1, 2, 3, 4, 5))
print(f"列表大小: {list_size} 字节") # 输出: 列表大小: 96 字节
print(f"元组大小: {tuple_size} 字节") # 输出: 元组大小: 80 字节# 遍历速度比较
list_time = timeit.timeit('[1, 2, 3, 4, 5][2]', number=1000000)
tuple_time = timeit.timeit('(1, 2, 3, 4, 5)[2]', number=1000000)
print(f"列表访问时间: {list_time}") # 列表访问时间: 0.034
print(f"元组访问时间: {tuple_time}") # 元组访问时间: 0.024
七、常见误区与注意事项
- 单元素元组必须有逗号:
(42)
是整数,(42,)
才是元组 - 元组不可变但元素可变:如果元组包含可变对象(如列表),这些对象可以修改
- 元组方法很少:因为不可变,所以方法比列表少得多
- +=操作的特殊性:看起来是修改,实际上是创建新元组
# 元组包含可变对象
mixed_tuple = (1, 2, [3, 4])
mixed_tuple[2][0] = 99 # 可以修改列表元素
print(mixed_tuple) # 输出: (1, 2, [99, 4])# +=操作
t = (1, 2)
print(id(t)) # 输出: 内存地址1
t += (3, 4)
print(id(t)) # 输出: 内存地址2(不同),说明创建了新元组
八、总结
元组是Python中一个简单但强大的数据类型,它的核心特点是不可变性。通过本文的学习,你应该掌握了:
- 元组的基本概念和创建方式
- 如何访问和操作元组元素
- 元组的常用方法和属性
- 元组的进阶用法和性能优势
- 使用元组时的注意事项
记住这个简单的选择原则:
- 当数据需要变化时 → 使用列表
- 当数据固定不变时 → 使用元组
- 需要字典键时 → 必须使用元组(如果键需要多个值)
元组虽然简单,但在Python编程中有着不可替代的作用,合理使用可以提高代码的安全性和性能。
相关文章:
Python元组全面解析:从入门到精通
文章目录 Python元组全面解析:从入门到精通一、元组的基本概念1. 什么是元组?2. 元组与列表的对比3. 为什么需要元组? 二、元组的创建方式1. 基本创建方法2. 其他创建方式 三、元组的访问与操作1. 访问元素2. 切片操作3. 元组解包 四、元组的…...
1 asyncio模块
1.1核心概念 1.1.1协程 协程是一种特殊的函数,可以在执行过程中暂停,也可以稍后恢复执行。协程通过async关键字来指定。 await关键字:如果想要立即执行,那调用协程的时候,前面加上await关键字。只想创建协程对象稍后…...
交通拥堵预测器(python)
这是一个基于机器学习的交通拥堵预测应用,使用随机森林算法。 功能特点: - 使用随机森林算法进行交通拥堵预测 - 直观的图形用户界面 - 支持模型训练、评估和保存/加载 - 实时预测特定时间段的拥堵程度 - 数据可视化功能(按星期分布、按时间段分布、热力图) - 支持自…...
解决服务器重装之后vscode Remote-SSH无法连接的问题
在你的windows命令窗口输入: ssh-keygen -R 服务器IPssh-keygen 不是内部或外部命令 .找到Git(安装目录)/usr/bin目录下的ssh-keygen.exe(如果找不到,可以在计算机全局搜索) 2.属性–>高级系统设置–>环境变量–>系统变量,找到Path变量&#…...
STM32实战指南:DHT11温湿度传感器驱动开发与避坑指南
知识点1【DHT11的概述】 1、概述 DHT是一款温湿度一体化的数字传感器(无需AD转换)。 2、驱动方式 通过单片机等微处理器简单的电路连接就能实时采集本地湿度和温度。DHT11与单片机之间采用单总线进行通信,仅需要一个IO口。 相对于单片机…...
使用 Terraform 创建 Azure Databricks
使用 Terraform 创建 Azure Databricks Terraform 是一种基础设施即代码(IaC)工具,允许用户通过声明式配置文件来管理和部署云资源。Azure Databricks 是一个基于 Apache Spark 的分析平台,专为数据工程和数据科学设计。通过 Terraform,可以自动化 Azure Databricks 的创…...
对话即编程:如何用 Trae 的 @智能体 5 分钟修复一个复杂 Bug?
引子:当新手遇到 "天书" 般的报错 作为刚加入团队的开发者,我在接手一个遗留的 Python 数据处理项目时,遇到了一个诡异报错: python 复制 下载 ValueError: shape mismatch: value array of shape (500,) could no…...
【工具使用】STM32CubeMX-片内Flash读写操作
一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。 本文主要讲述STM32芯片片内Flash功能的应用及其相关知识…...
Java转Go日记(三十九):Gorm查询
1.1.1. 查询 // 获取第一条记录,按主键排序db.First(&user)SELECT * FROM users ORDER BY id LIMIT 1;// 获取最后一条记录,按主键排序db.Last(&user)SELECT * FROM users ORDER BY id DESC LIMIT 1;// 获取所有记录db.Find(&users)SELECT *…...
终端安全与终端管理:有什么区别及其重要性?
在当今快速发展的远程和混合工作环境中,IT 团队面临双重挑战:一方面需保护终端免受日益增长的网络风险,另一方面要管理跨越日益分散网络的设备。这些需求催生了两个关键的 IT 解决方案:终端安全和终端管理。尽管二者时常被共同讨论…...
【二分 优先队列】P3611 [USACO17JAN] Cow Dance Show S|普及+
本文涉及的基础知识点 C二分查找 C堆(优先队列) [USACO17JAN] Cow Dance Show S 题面翻译 题目描述 经过几个月的排练,奶牛们基本准备好展出她们的年度舞蹈表演。今年她们要表演的是著名的奶牛芭蕾——“cowpelia”。 表演唯一有待决定的是舞台的尺寸。一个大…...
蓝桥杯分享经验
系列文章目录 提示:小白先看系列 第一章 蓝桥杯的钱白给吗 文章目录 系列文章目录前言一、自我介绍二、经验讲解:1.基础知识2.进阶知识3.个人观点 三、总结四、后续 前言 第十六届蓝桥杯已经省赛已经结束了,相信很多小伙伴也已经得到自己的成绩了。接下…...
TDengine 安全部署配置建议
背景 TDengine 的分布式、多组件特性导致 TDengine 的安全配置是生产系统中比较关注的问题。本文档旨在对 TDengine 各组件及在不同部署方式下的安全问题进行说明,并提供部署和配置建议,为用户的数据安全提供支持。 安全配置涉及组件 TDengine 包含多…...
Grafana当前状态:SingleStat面板
Grafana的SingleStat面板是一种用于展示单个关键指标(KPI)的可视化组件,特别适合需要突出显示核心业务指标的场景(如实时销售额、在线用户数、系统错误率等)。它通过简洁的布局和丰富的样式选项,帮助用户快速聚焦核心数据。Singlem Panel侧重于展示系统的…...
专题五:floodfill算法(太平洋大西洋水流问题)
以leetcode417题为例 题目解析: 整张图,左边深蓝的是太平洋,右边浅蓝的是大西洋,你需要在矩阵中找到一个点,使其可以流向太平洋又可以流向大西洋,并且你每次流的时候只能由高到低,或者相等到相…...
【HTML】【面试提问】HTML面试提问总结
第一章 HTML基础相关提问 1.1 HTML基本概念 1.1.1 什么是HTML HTML 即超文本标记语言(HyperText Markup Language)😎,它是用于创建网页的标准标记语言。简单来说,HTML 就像是搭建房屋的砖块🧱࿰…...
解锁MySQL性能调优:高级SQL技巧实战指南
高级SQL技巧:解锁MySQL性能调优的终极指南 开篇 当前,随着业务系统的复杂化和数据量的爆炸式增长,数据库性能调优成为了技术人员面临的核心挑战之一。尤其是在高并发、大数据量的场景下,SQL 查询的性能直接影响到整个系统的响应…...
数据分析与应用---数据可视化基础
目录 Matplotlib基础绘图 (一)、pyplot绘图基础语法与常用参数 1、pyplot基础语法 (1) 创建画布与创建子图 (2) 添加画布内容 (3) 保存与显示图形 案例代码 2. 设置pyplot的动态…...
android双屏之副屏待机显示图片
摘要:android原生有双屏的机制,但需要芯片厂商适配框架后在底层实现。本文在基于芯发8766已实现底层适配的基础上,仅针对上层Launcher部分对系统进行改造,从而实现在开机后副屏显示一张待机图片。 副屏布局 由于仅显示一张图片&…...
oracle序列自增问题
1.先查询表名对应的序列名称 SELECT trigger_name, trigger_type, triggering_event FROM all_triggers WHERE table_name 表名;2. 查询id最大值 SELECT MAX(ID) FROM 表名;3. 查询下一次生成ID SELECT SJCJ_ENERGY_DATA_INSERTID.NEXTVAL FROM DUAL;4. 设置临时步长,越过…...
FLASHDB API分析
fdb_kvdb_init 函数详解 fdb_kvdb_init 是 FlashDB 框架中用于 初始化键值数据库(KVDB) 的核心接口,其功能涵盖底层存储配置、默认数据加载与多模式适配。以下从功能、参数、使用场景及注意事项展开分析: 一、功能与作用 …...
使用 ABP vNext 集成 MinIO 构建高可用 BLOB 存储服务
🚀 使用 ABP vNext 集成 MinIO 构建高可用 BLOB 存储服务 本文基于 ABP vNext MinIO 的对象存储集成实践,系统讲解从 MinIO 部署、桶创建、ABP 集成、上传 API、安全校验、预签名访问,到测试、扩展及多租户支持的全过程。目标是构建一套可复…...
3.安卓逆向2-安卓文件目录
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 上一个内容:2.安卓逆向2-adb指令 首先使用adb连接到手机,如下图使用adb命令列出手机的目录&am…...
云原生时代的系统可观测性:理念变革与实践体系
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么可观测性在云原生时代变得更加重要? 传统应用系统运行于固定服务器,拓扑结构稳定、依赖路径清晰,排查故障依赖日志和人工经验已足够支撑运维。但在云原生环境中,系统正快速演变为: 微…...
力扣网-复写零
1.题目要求 2.题目链接 1089. 复写零 - 力扣(LeetCode) 3.题目解答 class Solution {public void duplicateZeros(int[] arr) {int cur0,dest-1,narr.length;while(cur<n){//遇到0就dest走两步if(arr[cur]0){dest2;}//遇到非零元素dest就走一步els…...
高项-挣值管理TCPI
TCPI(完工尚需绩效指数)的英文全称及含义 TCPI 是项目管理(尤其是挣值管理EVM, Earned Value Management)中的一个关键指标,其英文全称为: To-Complete Performance Index 中文译为**“完工尚需绩效指数”…...
Java大厂面试三轮问答:微服务与数据库技术深度解析
Java大厂面试:谢飞机的三轮挑战 第一轮:微服务基础与电商场景设计 面试官: "谢飞机,假设我们要设计一个电商平台,需要支持用户下单、支付以及订单追踪。你会如何设计微服务架构?" 谢飞机: "呃&#…...
Linux 移植 Docker 详解
一、移植前的环境准备 在将 Docker 移植到 Linux 系统之前,需要确保系统满足一定的条件,以保证 Docker 能够稳定运行。 1. 操作系统版本要求 Docker 对 Linux 操作系统版本有一定的要求,不同的 Docker 版本适配不同的 Linux 发行版及版本。常…...
滑动验证码缺口识别与自动化处理技术解析
在如今的网络安全环境中,滑动验证码作为一种主流的人机验证方案,被广泛应用。它的核心挑战主要集中在两个方面:一是如何准确地识别出缺口位置,二是如何模拟出逼真的拖动轨迹。 一、缺口识别技术方案 (一)…...
C++字符串处理:`std::string`和`std::string_view`的区别与使用
在 C中,std::string和std::string_view都用于处理字符串,但它们的用途和性能特点有很大不同。本教程将通过代码示例和流程图,帮助你快速掌握它们的使用方法。 1.什么是std::string和std::string_view? 1.1std::string std::str…...
Uniapp中动态控制scroll-view滚动的方式
在Uniapp 4.45中,动态修改scroll-view的scroll-left属性时无法触发滚动(直接设置scroll-left属性值没问题),这通常是因为数据更新与 DOM 渲染之间的异步特性导致的。知道了原因,但是直接修改scroll-left属性值还是失败…...
手机怎么查看网络ip地址?安卓/iOS设备查询指南
在移动互联网时代,IP地址作为设备的网络身份证,无论是网络调试、远程连接还是排查故障都至关重要。本文将系统介绍安卓和iOS设备查看IP地址的多种方法,帮助您快速掌握这一实用技能。 一、安卓手机查看IP地址方法 1、通过WiFi设置查看 打开设…...
R语言+贝叶斯网络:涵盖贝叶斯网络的基础、离散与连续分布、混合网络、动态网络,Gephi可视化,助你成为数据分析高手!
🔍 在现代生态、环境及地学研究中,变量及其因果关系的推断是核心课题之一。然而,传统的因果关系研究通常依赖于昂贵的实验,而实验结果往往与天然环境中的实际因果联系存在较大偏差。例如,在生态系统中,物种…...
手机内存不够,哪些文件可以删?
1️⃣应用缓存文件 安卓:通过「文件管理器」→「Android」→「data」或「cache」文件夹(部分需权限),或直接在应用设置中清除缓存 iOS:无需手动清理,系统会自动管理,或在应用内设置中清除&…...
C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)
在C语言中,经常出现上述的概念,即比特(bit)、字节(Byte)、字(Word)、整数(Int)。查看C语言标准,比特(bit)的定义如下&…...
组态王通过开疆智能profinet转ModbusTCP网关连接西门子PLC配置案例
本案例是组态王通过使用开疆智能研发的Profinet转ModbusTCP网关采集西门子1200PLC中数据的案例。 网关配置 首先来配置网关的参数,打开网关配置软件“Gateway Configuration Studio” 由于组态王那侧设定为ModbusTCP客户端所以网关作为ModbusTCP服务器。新建项目…...
GO语言学习(五)
GO语言学习(五) 前面我们已经学了一些关于golang的基础知识,从这一期开始,我们就来讲解一下基于golang为后端的web开发,首先这一期为一些golang为后端的web开发基础讲解,我们将会从web的工作方式、golang如…...
Supermemory:让大模型拥有“长效记忆“
目录 引言:打破大语言模型的记忆瓶颈,迎接AI交互新范式 一、Supermemory 核心技术 1.1 透明代理机制 1.2 智能分段与检索系统 1.3 自动Token管理 二、易用性 三、性能与成本 四、可靠性与兼容性 五、为何选择 Supermemory? 六、对…...
Hooks实现原理与自定义Hooks
React Hooks 是 React 16.8 引入的一种机制,允许在函数组件中使用状态(state)、副作用(effect)等功能,而无需编写 class 组件。其核心原理是通过闭包和链表结构,在 React 的 Fiber 架构中管理组…...
【NLP】35. 构建高质量标注数据
如何构建高质量标注数据?大语言模型背后的那只“看不见的手” 在讨论大语言模型(LLM)性能突破时,人们总是聚焦在模型参数、结构设计和训练技巧上。但真正懂行的人都知道——再好的模型也离不开一手好数据,尤其是那些“…...
2024CCPC吉林省赛长春邀请赛 Java 做题记录
目录 I. The Easiest Problem G. Platform Game L. Recharge E. Connected Components I. The Easiest Problem 签到题 直接输出 21 即可 // github https://github.com/Dddddduo // github https://github.com/Dddddduo/acm-java-algorithm // github https://github.com/…...
黑马程序员C++2024新版笔记 第三章 数组
1.数组定义 数组是一批相同类型的元素(element)的集合组成的数据结构。 声明语法: <数据类型> <数组名> [<数组长度>] int v[6] // 声明了可以存放6个int数字的数组 数组的每个元素有编号,称之为下标索引…...
Golang的网络安全策略实践
Golang的网络安全策略实践 一、理解网络安全的重要性 当今的网络环境中,安全问题日益突出,各种类型的攻击如雨后春笋般涌现,给个人和组织的信息资产造成了严重威胁。因此,制定和实施有效的网络安全策略至关重要。 二、Golang在网络…...
SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)
上一章学习了CAP开发准备,添加Service。 SAP学习笔记 - 开发12 - CAP 之 开发准备,添加服务-CSDN博客 本章继续学习CAP开发 - 添加数据库支持(Sqlite)。 目录 1,数据库准备 - H2 内存数据库 - Sqlite数据库 a&…...
DRIVEGPT4: 通过大语言模型实现可解释的端到端自动驾驶
《DriveGPT4: Interpretable End-to-End Autonomous Driving via Large Language Model》 2024年10月发表,来自香港大学、浙江大学、华为和悉尼大学。 多模态大型语言模型(MLLM)已成为研究界关注的一个突出领域,因为它们擅长处理…...
LLM最后怎么输出值 解码语言模型:从权重到概率的奥秘
LM Head Weights(语言模型头部权重):左侧的“LM Head Weights”表示语言模型头部的权重矩阵,它是模型参数的一部分。权重矩阵与输入数据进行运算。Logits(未归一化对数概率):经过与LM Head Weig…...
Better Faster Large Language Models via Multi-token Prediction 原理
目录 模型结构: Memory-efficient implementation: 实验: 1. 在大规模模型上效果显著: 2. 在不同类型任务上的效果: 为什么MLP对效果有提升的几点猜测: 1. 并非所有token对生成质量的影响相同 2. 关…...
【NLP】34. 数据专题:如何打造高质量训练数据集
构建大语言模型的秘密武器:如何打造高质量训练数据集? 在大语言模型(LLM)如 GPT、BERT、T5 爆发式发展的背后,我们常常关注模型架构的演化,却忽视了一个更基础也更关键的问题:训练数据从哪里来…...
uniapp 微信小程序 获取openId
嗨,我是小路。今天主要和大家分享的主题是“uniapp 微信小程序 获取openId”。 一、主要属性 1.uni.login 二、实例代码 1、前端代码 uni.login({provider: weixin,success: (res) > {uni.showLoading({title: 登录中...,mask: true})let code res.…...
企业标准信息公共服务平台已开放标准通编辑器访问入口
标准通 数字化标准编辑器 专业、高效、便捷 企业标准信息公共服务平台 近日,企业标准信息公共服务平台已开放标准通编辑器访问入口,可进入官网指定版块使用! 核心功能亮点 解决企业痛点 传统标准编制,需反复核对格式、逐条…...