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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习路之phpstudy--安装mysql5.7后在my.ini文件中无法修改sql_mode

windows环境下使用phpstudy安装mysql5.7后需要修改mysql中的sql_mode配置&#xff0c;但是在phpstudy中打开mysql配置文件my.ini后&#xff0c; 通过查找找不到sql_mode或sql-mode&#xff0c; 此时无法在my.ini文件中直接进行修改&#xff0c;可以使用mysql命令进行修改&#…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

ts: 定义一个对象接收后端返回对象数据,但是报错了有红色的红线为什么

问&#xff1a; const backendProgressData ref<object>&#xff08;{}&#xff09; 这是我的代码&#xff0c;但是当我进行使用的时候&#xff1a; backendProgressData.value xxxx接口返回数据progressData:{percentage:123,text:"文字"} 在template中{{…

解决Docker环境变量的配置的通用方法

我们部署的很多服务都是以Docker容器的形式存在的。 在运行Docker容器前&#xff0c;除了设置网络、数据卷之外&#xff0c;还需要设置各种各样的环境变量。 有时候&#xff0c;由于容器版本的问题&#xff0c;一些文档没有及时更新&#xff0c;可能同时存在多个新旧版本的环…

【腾讯云产品最佳实践】腾讯云CVM入门技术与实践:通过腾讯云快速构建云上应用

目录 前言 什么是腾讯云CVM&#xff1f; 腾讯云CVM的技术优势 基于最佳技术实践&#xff0c;使用腾讯云CVM搭建应用 1. 开通CVM实例 2. 连接CVM实例 3. 配置Web环境 4. 部署PHP应用 腾讯云CVM行业应用案例&#xff1a;电商平台的双十一攻略 1. 弹性伸缩解决高并发问题…

51c嵌入式~IO合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11697814 一、STM32串口通信基本原理 通信接口背景知识 设备之间通信的方式 一般情况下&#xff0c;设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。 串行通信的分类 1、按照数据传…

七、电机三环控制

电机三环控制指的是&#xff0c;直流有刷电机三环&#xff08;电流环速度环位置环&#xff09;PID 控制。 1、三环PID控制原理 三环 PID 控制就是将三个 PID 控制系统&#xff08;例如&#xff1a;电流环、速度环以及位置环&#xff09;串联起来&#xff0c;然后对前一个系统…

NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标

论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息&#xff1a; 简介&#xff1a; 本文的背景是机器翻译&#xff08;MT&#xff09;任务的评估。在机器翻译领域&#xff0c;由于不同场景和语言对的需求差异&a…

【Vue】Vue指令

目录 概念 作用 分类 内容渲染指令 属性绑定指令 事件绑定指令 条件渲染指令 v-if/v-else-if/v-else多分支渲染 v-show和v-if的区别 列表渲染指令 v-for中的key属性 双向绑定指令 示例&#xff1a;图片切换 示例&#xff1a;可折叠面板 示例&#xff1a;书架…

C++:类和对象(三)

1.深入了解构造函数 1.1初始化列表 引入&#xff1a;我们首先要知道&#xff0c;在类中我们是声明变量&#xff0c;在实例化的时候才是开空间&#xff0c;在调用构造函数的时候又分两段&#xff0c;一段是定义&#xff08;所有的成员变量进行定义&#xff09;&#xff0c;一段…

北京申请中级职称流程(2024年)

想找个完整详细点的申请流程资料真不容易&#xff0c;做个分享送给需要的人吧。 不清楚为什么说文章过度宣传&#xff0c;把链接和页面去掉了&#xff0c;网上自己找一下。 最好用windows自带的EDGE浏览器打开申请网站&#xff0c;只有在开始申请的时间内才可以进行网上申报&…

好用的js组件库

lodash https://www.lodashjs.com/https://www.lodashjs.com/ uuid 用于生成随机数&#xff0c;常用于生成id标识 GitHub - uuidjs/uuid: Generate RFC-compliant UUIDs in JavaScripthttps://github.com/uuidjs/uuid dayjs 常用于时间的处理 安装 | Day.js中文网 (fenxi…

php:使用socket函数创建WebSocket服务

一、前言 闲来无事&#xff0c;最近捣鼓了下websocket&#xff0c;但是不希望安装第三方类库&#xff0c;所以打算用socket基础函数创建个服务。 二、构建websocket服务端 <?phpclass SocketService {// 默认的监听地址和端口private $address 0.0.0.0;private $port 8…

Tailscale 自建 Derp 中转服务器(全程无 Docker + 无域名纯 IP 版本)

文章目录 整体大纲目的&#xff1a;为什么要建立 Derp 中转服务器云服务器安装 DerpDerp 中转服务器介绍安装 Go 环境通过 Go 安装 Derp处理证书文件自签一个域名给 Derp验证 Derp 是否启动 云服务器安装并登录 Tailscale第一种组合&#xff1a; 官方 Tailscale 账号 自己的 D…

shell--第一次作业

1.接收用户部署的服务名称 # 脚本入口 read -p "请输入要部署的服务名称&#xff1a;" service_name 2.判断服务是否安装 # 判断服务是否安装 if rpm -q "$service_name" &>/dev/null; then echo "服务 $service_name 已安装。" 已…

项目部署问题bug记录(长期更新)

一、编译相关 1.submodules/simple-knn/simple_knn.cu(90): error: identifier "FLT_MAX" is undefined me.minn { FLT_MAX, FLT_MAX, FLT_MAX }; 部署photoreg工程&#xff0c;在编译simple_knn的时候&#xff0c;报错&#xff1a; (photoreg) leelee…

ant-design-vue中table组件多列排序

antD中table组件多列排序 使用前注意实现效果图实现的功能点及相关代码1. 默认按某几个字段排序2. 点击排序按钮可同时对多个字段进行排序3. 点击重置按钮可恢复默认排序状态。 功能实现完整的关键代码 使用前注意 先要确认你使用的antD版本是否支持多列排序&#xff0c;我这里…

影视后期学习Ⅰ~

1.DV是光盘 磁带 2.序列就是我们要制作的一个视频。 打开界面显示&#xff1a; 一号面板放的是素材&#xff0c;二号面板叫源监视器面板&#xff08;它的名字需要记住&#xff09;在一号面板点击文件之后&#xff0c;进入二号面板&#xff0c;在二号面板预览没问题后&#xf…

大语言模型---Llama模型文件介绍;文件组成

文章目录 1. 概要2. 文件组成 1. 概要 在使用 LLaMA&#xff08;Large Language Model Meta AI&#xff09;权重时&#xff0c;通常会涉及到与模型权重存储和加载相关的文件。这些文件通常是以二进制格式存储的&#xff0c;具有特定的结构来支持高效的模型操作。以下以Llama-7…

elasticsearch介绍和部署

1 elasticsearch介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。可以很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性。Elasticsearch 的实现原理主要分为以下几个步骤&#xff0c;首先用户将数据提交到Elasticsea…