【玩转python】入门篇day08-python数据类型-元组

Python中的元组(Tuple)介绍

在Python中,元组(Tuple)是一种基本的数据结构,用于存储一系列不可变的项(元素)。与列表(List)相似,元组也是有序的集合,但与之不同的是,元组一旦创建就不能被修改(即不可变)。这种特性使得元组在某些特定场景下非常有用。下面,我们将详细介绍元组的语法、使用场景、注意事项,以及它与数组(在Python中通常指列表)的区别。

元组的语法

元组在Python中通过圆括号()来定义,元素之间用逗号,分隔。例如:

my_tuple = (1, 2, 3, 'a', 'b', 'c')

即使元组只有一个元素,也需要在元素后添加逗号,以区分元组和普通的圆括号表达式。例如:

#这里如果只有一个数组42,也需要加上逗号,表示这个是元组
single_element_tuple = (42,)

如果不加逗号,Python会将(42)解释为整数42的表达式,而不是一个包含单个元素的元组

使用场景

1、作为字典的键:由于元组是不可变的,因此它可以作为字典(Dictionary)的键,而列表则不可以。

首先不可变的值可以作为字典的键,所以字符串和元组都可以作为字典的键,大多数情况下我们用字符串,这样读取的时候也方便,可是什么情况下会用元组来作为字典的键呢,举例:

你可能有一个存储学生成绩的字典,其中键是学生的班级编号和学号。在这种情况下,你可以使用元组作为键,其中包含班级编号和学号两个元素。这样,你就可以通过这两个值来快速检索学生的成绩,而无需先查找班级编号,然后再在该班级中查找特定的学号。

# 键包括学生的班级和学号  
#值成绩
data = {  
    ('61班', '1'): '100',  
    ('62班', '7'): '89',  
    ('61班', '19'): '53'  
}  
# 访问字典  
print(data[('61班', '1')])  # 输出: 100

2、存储记录:当你想表示一系列相关联的数据(如坐标点、学生信息等),并且这些数据在创建后不需要修改时,元组是一个很好的选择。

# 使用元组存储学生的姓名和成绩  
student_records = [  
    ('John', 92, 'A'),  
    ('Anna', 85, 'B+'),  
    ('Peter', 88, 'B+')  
]  
# 遍历元组列表  
for record in student_records:  
    print(f"Name: {record[0]}, Score: {record[1]}, Grade: {record[2]}")

3、函数返回多个值:Python函数实际上只能返回一个值,但如果这个值是元组,那么就可以实现返回多个值的效果。

# 函数返回多个值(实际上是返回一个元组)  
def get_person_info():  
    return ('Alice', 30, 'Engineer')  
  
# 接收返回值  
name, age, profession = get_person_info()  
print(f"Name: {name}, Age: {age}, Profession: {profession}")

4、用于不可变集合:当需要保证数据集合的不可变性时,可以使用元组代替列表

# 使用元组作为不可变集合  
point = (1, 2)  
# 由于元组不可变,下面的操作会抛出异常(仅作为说明,实际不会执行)  
# point[0] = 3  # TypeError: 'tuple' object does not support item assignment  
  
# 但可以安全地作为参数传递  
def print_point(p):  
    print(f"Point: ({p[0]}, {p[1]})")  
  
print_point(point)  # 输出: Point: (1, 2)

注意事项

1、不可变性:一旦创建,元组中的元素就不能被添加、删除或修改。如果需要修改元组中的数据,通常的做法是将元组转换为列表进行修改,然后再转换回元组(如果需要的话)。

2、内存占用:由于元组的不可变性,Python可以在编译时对其进行优化,这意味着在某些情况下,元组可能比列表更节省内存。

3、元组切片:虽然元组本身不可变,但你可以通过切片操作来获取元组的一个子元组,这个子元组是原元组的一个新视图,但它本身仍然是不可变的

与List的区别(在Python语境下)

在Python中,我们通常不直接使用“数组”这个词,而是用列表(List)来代表可以动态改变大小的序列集合。不过,如果我们从广义上理解数组为有序集合,那么元组与列表(或通常所说的“数组”)的主要区别在于:

  • 可变性:元组是不可变的,一旦创建就不能改变其内容;而列表是可变的,可以添加、删除或修改其中的元素。
  • 性能:在某些情况下,由于元组的不可变性,Python可以对其进行更多的优化,因此在某些操作(如哈希计算)上,元组可能比列表更快。
  • 用途:元组通常用于存储那些不应该被修改的数据,而列表则用于存储需要频繁修改的数据集合。

总之,元组是Python中一个非常有用的数据结构,其不可变性和特定的使用场景使其在某些情况下成为比列表更合适的选择。了解元组的这些特性和用法,将有助于你更高效地编写Python代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3重构案例(使用vue3的语法重构element的button组件)

这篇文章紧接的上一篇文章,上篇文章是对给element的button组件写了一个单元测试,这篇文章是使用vue3的语法进行重构,这里说一下单元测试和重构的联系,当你给组件写了单元测试之后,重构会减少你很多的debug时间&#xf…

Transformer和Mamba强强结合!最新混合架构全面开源,推理速度狂飙8倍

最近发现,将Mamba和Transformer模块混合使用,效果会比单独使用好很多,这是因为该方法结合了Mamba的长序列处理能力和Transformer的建模能力,可以显著提升计算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

【Unity小知识】UnityEngine.UI程序集丢失的问题

问题表现 先来说一下问题的表现,今天在开发的时候工程突然出现了报错,编辑器提示UnityEngine.UI缺少程序集引用。 问题分析与解决(一) 既然是程序集缺失,我们首先查看一下工程项目是否引用了程序集。在项目引用中查找一…

自定义流程表单开发优势体现在什么地方?

提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,…

java项目总结4

1.正则表达式 用于验证字符串是否满足自己所需要的规则。方法:matches 注意:\在Java中有特殊涵义,是将其它的意思本来化,假设"是用来引用字符串的,但是你如果想要输出它,那是不是就变成了System.out…

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域,以下是其中几个最新的应用: 1、自动驾驶汽车:自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化,帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

利用git将Qt代码托管到U盘或者网盘

文章目录 1.前言2.解决方案3.操作步骤3.1.软件安装3.2.在U盘创建裸仓库3.3.创建Qt程序并将代码上传至U盘3.4.版本标记及切换3.4.在别的电脑上clone代码出来 4.其他5.结语 1.前言 我们在开发项目时,随着项目需求的增加以及bug的修复,肯定会涉及到版本管理…

【山东大学】web数据管理——复习笔记

写在前面 若有图片加载失败,请科学上网 。本文为对软件学院连老师的PPT课件总结所得的复习笔记,仅供参考。不保证对考点的全覆盖,以PPT为主。对往年考过的题相关知识点前面都标注了“考过”,并高亮,供参考。写的比较匆…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力,不仅能够实现远程操控开关电源,部分高端型号更是集成了电量统计与自动化操作功能,为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价,因版本差异可能有所不同。…

分享6个自己每天都会打开的网站

分享6个自己每天都会打开的网站,有实用办公网站,也有休闲摸鱼网站,链接直达,速看~ 1、鸠摩搜索 https://www2.jiumodiary.com/ 一个免费的电子书下载网站,页面干净无广告,只有一个搜索框,输入…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 : 我们今天UI自动化设计的时候,通常会遵循一些设计模式,例如Page Object模式。但是自己找元素再去填写有一些麻烦,所以我们可以通过拆解录制的脚本,将其中的元素提取出来…

vue3中pinia使用持久化管理

安装插件 npm install pinia pinia-plugin-persistpinia进行注册 创建index.ts import { createPinia } from pinia; //对外暴露大仓库 export default createPinia(); 在mian.ts //引入pinpa import { createApp } from vue //引入根组件 import App from ./App.vue const…

class类和style内联样式的绑定

这里的绑定其实就是v-bind的绑定,如代码所示,div后面的引号就是v-bind绑定,然后大括号将整个对象括起来,对象内先是属性,属性后接的是变量,这个变量是定义在script中的,后通过这个变量&#xff…

CAN转PN网关模块连接激光切割机的配置方法

激光切割机在工业生产中被广泛应用,而激光发射器与控制设备常以不同的协议存在两者之间,CAN总线和Profinet以各自的特点被广泛用于设备当中。本文将介绍介绍兴达易控CAN转Profinet网关模块(XD-PN_CAN20)连接 CAN 激光切割机的使用…

【算法 - 哈希表】两数之和

这里写自定义目录标题 两数之和题目解析思路解法一 :暴力枚举 依次遍历解法二 :使用哈希表来做优化 核心逻辑为什么之前的暴力枚举策略不太好用了?所以,这就是 这道题选择 固定一个数,再与其前面的数逐一对比完后&…

如何在 Ubuntu上搭建 LAMP

远程登录 Ubuntu系统环境 ssh (User)(IP) # 比如:ssh lennlouis192.168.207.128 为安全起见,建议你使用 root 登录 VPS 后创建一个具有 sudo 权限的帐号。 安装和配置 Apache 2 Apache Http Server 是一个开源的,非常流行,使用…

RAG 为什么需要文本分割(Chunking)

Picone上的一个博客,翻译过来学习一下,其中加入了一些个人的理解和调整,有兴趣更深入研究的可以看一下文章的原文。 为什么需要文本分割(Chunking) 在构建与LLM相关的应用程序时,Chunking是将大量文本分解…

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

【黑马头条】 article微服务编译失败,包com.heima.model.common.article.dtos 不存在

解决办法, 将 model微服务重新打包编译下载 然后在service的pom文件里面加上版本号 这样编译就不会找不到啦

SQL注入【1】——通用漏洞/SQL注入/mysql跨库/ACCESS偏移

一、知识点: 1、脚本代码与数据库前置知识 2、Access数据库注入-简易&偏移 3、MYSQL数据库注入-简易:权限跨库 二、前置知识: (一)SQL注入漏洞产生原理分析 SQL注入产生条件:根本条件:可控变量、特定函数。 脚本代码在实现…