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

python基本数据类型 -- 元组tuple

在 Python 中,元组(Tuple)是一种轻量级的、不可变的数据结构。与列表类似,元组用于存储有序的数据集合,但它一旦创建,其内容就无法更改。这种特性让元组在某些场景下更加安全和高效。本文将从定义、操作、应用等方面,对 Python 元组进行全面总结。


什么是 Python 元组?

元组是一个有序的、不可变的数据结构,使用圆括号 () 表示,元素之间用逗号分隔。

# 示例 
my_tuple = (1, "hello", 3.14, [1, 2, 3], True)t1 = (1) # 要注意,这可不是元组哦!!!t2 = (1,) # 这才是元组!!!
  • 有序性:元组中的元素有固定顺序,可以通过索引访问。
  • 不可变性:元组的元素在创建后无法被修改。
  • 多样性:元组可以包含任意类型的元素,包括其他元组或列表。

元组的基本操作

1. 创建元组

元组可以通过多种方式创建:

# 普通元组 
my_tuple = (1, 2, 3) # 空元组 
empty_tuple = () # 单个元素的元组(需要加逗号) 
single_element_tuple = (42,) # 使用 tuple() 构造函数 
constructed_tuple = tuple([1, 2, 3])
2. 访问元组元素

元组支持通过索引访问其元素,索引从 0 开始,也支持负索引表示从末尾访问。

my_tuple = (10, 20, 30, 40) 
print(my_tuple[0]) # 10 
print(my_tuple[-1]) # 40
3. 元组解包

元组解包(Unpacking)是一种将元组元素拆分为多个变量的简洁方法。

coordinates = (10, 20) 
x, y = coordinates 
print(x, y) # 10, 20 # 使用 * 运算符 
a, *rest = (1, 2, 3, 4) 
print(a, rest) # 1, [2, 3, 4]

元组的常用方法

元组是不可变的,因此它的方法较少。以下是几个常用方法:

  • count(value):统计某个值在元组中出现的次数。
  • index(value):返回某个值第一次出现的索引。
my_tuple = (1, 2, 3, 2, 2) 
print(my_tuple.count(2)) # 3 
print(my_tuple.index(3)) # 2

元组 vs. 列表

特性元组 (Tuple)列表 (List)
可变性不可变可变
语法圆括号 ()方括号 []
性能比列表更高效(内存占用少)更灵活但稍微占用更多内存
用途用于固定数据集合用于需要频繁修改的集合

选择依据

  • 如果数据需要频繁更改,选择列表。
  • 如果数据在创建后不会更改,选择元组可以提升性能。

高级用法

1. 元组的嵌套

元组可以包含其他元组或列表,形成嵌套结构。

nested_tuple = (1, (2, 3), [4, 5]) 
print(nested_tuple[1][1]) # 3
2. 元组作为字典键

由于元组是不可变的,它可以作为字典的键,而列表不行。

my_dict = {(1, 2): "point", (3, 4): "another point"} 
print(my_dict[(1, 2)]) # "point"
3. 函数返回多个值

函数可以通过返回元组的形式,一次返回多个值。

def divide_and_remainder(a, b):return a // b, a % bquotient, remainder = divide_and_remainder(10, 3)
print(quotient, remainder)  # 3, 1
4. 元组的不可变性与安全性

元组的不可变性使得它在多线程环境下更加安全,避免了数据竞争问题。


元组的性能与注意事项

1. 时间复杂度

元组的访问和迭代效率与列表相同,但由于其不可变性,在某些场景下内存占用更少。

2. 注意事项
  • 元组的不可变性指的是元组本身不可变,但如果元组中包含可变对象(如列表),这些对象可以被修改。
my_tuple = ([1, 2], 3) 
my_tuple[0].append(4) 
print(my_tuple) # ([1, 2, 4], 3)
  • 创建单元素元组时,不要忘记逗号,否则会被认为是普通数据类型。
not_a_tuple = (42) 
is_a_tuple = (42,) 
print(type(not_a_tuple)) # <class 'int'> 
print(type(is_a_tuple)) # <class 'tuple'>

元组的实际应用

1. 数据打包与解包

元组常用于将多个数据打包传递或返回,比如函数参数和返回值。

2. 不可变数据存储

元组适合存储不会被修改的数据,例如坐标点、数据库记录。

3. 提升代码性能

在需要大量存储和访问操作而无需修改的场景中,元组更高效。


结论

Python 的元组因其不可变性、高效性和简单性,在固定数据存储和安全性要求高的场景下表现出色。通过灵活运用元组的解包、多值返回和嵌套特性,可以让代码更加简洁高效。

相关文章:

python基本数据类型 -- 元组tuple

在 Python 中&#xff0c;元组&#xff08;Tuple&#xff09;是一种轻量级的、不可变的数据结构。与列表类似&#xff0c;元组用于存储有序的数据集合&#xff0c;但它一旦创建&#xff0c;其内容就无法更改。这种特性让元组在某些场景下更加安全和高效。本文将从定义、操作、应…...

tcpdump交叉编译

TCPDUMP在Libpcap上开发。 首先需要编译libcap。 网上那么多教程&#xff0c;下载地址都只给了一个英文的官网首页&#xff0c; 你尽可以试试&#xff0c;从里面找到下载地址都要费半天时间。 \color{red}网上那么多教程&#xff0c;下载地址都只给了一个英文的官网首页&#…...

Spring IOC注入方式、Bean作用域

Spring IOC注入 手动注入 set方法注入 需要提供set方法 public class UserService {private UserDao userDao; ​public void setUserDao(UserDao userDao) {this.userDao userDao;} } 设置属性字段的值 <bean id"userService" class"com.shsxt.servi…...

uniapp微信小程序转发跳转指定页面

onShareAppMessage 是微信小程序中的一个重要函数&#xff0c;用于自定义转发内容。当用户点击右上角的菜单按钮&#xff0c;并选择“转发”时&#xff0c;会触发这个函数。开发者可以在这个函数中返回一个对象&#xff0c;用于定义分享卡片的标题、图片、路径等信息。 使用场…...

利用uniapp开发鸿蒙:运行到鸿蒙模拟器—踩坑合集

从uniapp运行到鸿蒙模拟器上这一步&#xff0c;就有非常多的坑&#xff0c;一些常见的坑&#xff0c;官网都有介绍&#xff0c;就不再拿出来了&#xff0c;这里记录一下官网未记录的大坑 1.运行路径从hbuilderx启动鸿蒙模拟器 解决方法&#xff1a; Windows系统&#xff0c;官…...

【Vue】Vue3.0(二十五)Vue3.0中的具名插槽 的概念和使用场景

上篇文章 【Vue】Vue3.0&#xff08;二十四&#xff09;Vue3.0中 r e f s 、 refs 、 refs、parent 的概念和使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月20日16点30分 …...

【pytorch-02】:张量的索引、形状操作和常见运算函数

文章目录 1 张量索引1.1 简单行列索引和列表索引1.2 布尔索引和多维索引 2 张量的形状操作2.1 reshape函数2.2 transpose和permute函数的使用2.3 view和contiguous函数2.4 squeeze和unsqueeze函数用法2.5 张量更改形状小结 3 常见运算函数 1 张量索引 1.1 简单行列索引和列表索…...

C语言-指针作为函数返回值及二级指针

1、指针作为函数返回值 c语言允许函数的返回值是一个指针&#xff08;地址&#xff09;我们将这样的函数称为指针函数&#xff0c;下面的例子定义一了一个函数strlong&#xff08;&#xff09;&#xff0c;用来返回两个字符串中较长的一个&#xff1a; 1. #include <stdio…...

css 使用图片作为元素边框

先看原始图片 再看效果 边框的四个角灭有拉伸变形,但是图片的中部是拉伸的 代码 border-style: solid;/* 设置边框图像的来源 */border-image-source: url(/static/images/mmwz/index/bk_hd3x.png);/* 设置如何切割图像 */border-image-slice: 66;/* 设置边框的宽度 */border…...

Linux无sudo权限将zsh作为默认shell

由于我只有用户权限&#xff0c;没有sudo权限&#xff0c;将zsh作为用户默认shell需要密码&#xff0c;所以没法在系统层面进行操作&#xff0c;下面另寻他法。 安装zsh 可以根据网上教程去安装zsh&#xff0c;一般电脑上会带有zsh&#xff0c;可以使用下述命令查看是否安装z…...

【React 进阶】掌握 React18 全部 Hooks

一、数据更新驱动 1. useState 1. 基础介绍 useState主要用于声明和操作状态变量&#xff0c;可以使函数组件像类组件一样拥有state const [state, setState] useState(initialState);state&#xff1a;状态&#xff0c;作为渲染视图的数据源 setState&#xff1a;改变st…...

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; 文章目录 数据预测概念和适用方式线性系统的适用性 数据预测算法和卡尔曼滤波公式推导状态空间方程和观测器先验估计后验估计…...

【SQL50】day 2

目录 1.每位经理的下属员工数量 2.员工的直属部门 3.判断三角形 4.上级经理已离职的公司员工 5.换座位 6.电影评分 7.修复表中的名字 8.患某种疾病的患者 9.删除重复的电子邮箱 1.每位经理的下属员工数量 # Write your MySQL query statement below #e1是经理&#xff0c;…...

【内存管理】理解 `WeakReference` 以更好地管理 Android 应用中的内存

在 Android 应用开发中&#xff0c;内存管理至关重要。糟糕的内存管理可能导致“内存泄漏”&#xff0c;即一些不再需要的对象仍然留在内存中&#xff0c;最终导致性能下降&#xff0c;甚至应用崩溃。WeakReference 就是帮助解决这个问题的一种工具。在本文中&#xff0c;我们将…...

解决IDEA中Maven管理界面不是层级结构的问题

文章目录 0. 前言1. 点击Maven管理界面右上角的三个点2. 勾选将模块分组3. 分组后的层级结构 更多 IDEA 的使用技巧可查看 IDEA 专栏中的文章&#xff1a;IDEA 0. 前言 在 IDEA 中&#xff0c;如果项目中有很多子模块&#xff0c;每个子模块中又有一个或多个子模块时&#xf…...

Linux运维篇-iscsi存储搭建

目录 概念实验介绍环境准备存储端软件安装使用targetcli来管理iSCSI共享存储 客户端软件安装连接存储 概念 iSCSI是一种在Internet协议上&#xff0c;特别是以太网上进行数据块传输的标准&#xff0c;它是一种基于IP Storage理论的存储技术&#xff0c;该技术是将存储行业广泛…...

深度学习基础练习:代码复现transformer重难点

2024/11/10-2024/11/18: 主要对transformer一些比较难理解的点做了一些整理&#xff0c;希望对读者有所帮助。 前置知识&#xff1a; 深度学习基础练习&#xff1a;从pytorch API出发复现LSTM与LSTMP-CSDN博客 【神经网络】学习笔记十四——Seq2Seq模型-CSDN博客 【官方双语】一…...

141. Sprite标签(Canvas作为贴图)

上节课案例创建标签的方式&#xff0c;是把一张图片作为Sprite精灵模型的颜色贴图,本节给大家演示把Canvas画布作为Sprite精灵模型的颜色贴图&#xff0c;实现一个标签。 注意&#xff1a;本节课主要是技术方案讲解&#xff0c;默认你有Canvas基础&#xff0c;如果没有Canvas基…...

【IDEA】解决总是自动导入全部类(.*)问题

文章目录 问题描述解决方法 我是一名立志把细节说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有帮助 &#xff0c;记得【点赞】【收藏】 哦~ ❥(^_-)~ 如有错误、疑惑&#xff0c;欢迎【评论】指正探讨&#xff0c;我会尽可能第一时间回复…...

python中的OS模块的基本使用

&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x1f64f; 文章目录…...

想选靠谱的呼入语音机器人?这三个核心维度别忽略

电商大促期间客服热线占线不断&#xff0c;客户等待几分钟后愤然挂断&#xff1b;夜间咨询无人值守&#xff0c;潜在商机白白流失&#xff1b;传统语音机器人只会机械重复 “请按 1”&#xff0c;遇到稍微复杂的问题就答非所问…… 这些场景几乎是每个企业客服部门的日常痛点。…...

别再复制粘贴了!Element Plus 表格组件与SpringBoot后端数据联调实战

别再复制粘贴了&#xff01;Element Plus 表格组件与SpringBoot后端数据联调实战 在前后端分离的开发模式中&#xff0c;前端表格组件与后端数据的动态联调是每个开发者必须掌握的技能。Element Plus作为Vue3生态中最受欢迎的UI组件库之一&#xff0c;其表格组件(el-table)的灵…...

从状态机视角理解程序:形式化方法如何保证复杂系统正确性

1. 从数学视角审视程序&#xff1a;为什么我们需要形式化思维在软件开发的日常里&#xff0c;我们常常埋头于代码的细节&#xff1a;这个循环边界对不对&#xff1f;那个指针会不会为空&#xff1f;这个API调用返回错误该怎么处理&#xff1f;我们依赖编译器、静态分析工具、单…...

别再死记硬背了!用Spark实战电影评分分析,手把手教你搞定Join操作与数据清洗

用Spark实战电影评分分析&#xff1a;从数据清洗到Join操作的完整指南 每次看到电影评分网站上的"Top 100"榜单&#xff0c;你有没有好奇过背后的数据处理逻辑&#xff1f;作为Spark初学者&#xff0c;你可能已经啃了不少官方文档&#xff0c;但面对真实数据集时依然…...

别再手动拼图了!用Godot4的TileMap快速搭建2D游戏场景(附图层与相机跟随技巧)

别再手动拼图了&#xff01;用Godot4的TileMap快速搭建2D游戏场景&#xff08;附图层与相机跟随技巧&#xff09; 在独立游戏开发中&#xff0c;场景搭建往往是耗时最长的环节之一。许多新手开发者习惯用Sprite节点逐个摆放场景元素&#xff0c;这不仅效率低下&#xff0c;后期…...

3步解锁Beyond Compare 5专业版:Python密钥生成器终极指南

3步解锁Beyond Compare 5专业版&#xff1a;Python密钥生成器终极指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天试用期而烦恼吗&#xff1f;想免费使用这款强…...

如何高效批量下载抖音无水印视频:开源工具完整实战指南

如何高效批量下载抖音无水印视频&#xff1a;开源工具完整实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

抖音无水印下载器全解析:从零构建你的个人视频收藏库

抖音无水印下载器全解析&#xff1a;从零构建你的个人视频收藏库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

Unity 2D项目初始化实战:从零搭建可维护游戏骨架

1. 这不是“又一个Unity入门教程”&#xff0c;而是我带三个实习生从零做出第一个可玩Demo的真实路径你搜“Unity 2D 教程”&#xff0c;首页全是“5分钟创建角色”“10行代码实现跳跃”——画面很炫&#xff0c;但关掉视频后&#xff0c;你连项目文件夹里该删哪个.meta、该留哪…...

《从 0 实现 SGLang》第 1 篇 · LLM 推理引擎到底在做什么

千行代码&#xff0c;一步步搭出一个现代 LLM 推理引擎&#xff0c;吃透大模型推理的每一项关键技术。 本阶段目标 — 最简推理实现 用最朴素的方式把端到端推理跑通&#xff1a;先搭起整体框架&#xff0c;再逐个模块替换为完整实现。整个阶段共 5 篇短文&#xff1a; 序号…...