当前位置:首页 > 科技  > 软件

深挖 Python 元组 pt.1

来源: 责编: 时间:2023-10-08 07:04:56 336观看
导读哈喽大家好,我是咸鱼好久不见甚是想念,2023 年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢?我们知道元组(tuple)是 Python 的内置数据类型,tuple 是一个不可变的值序列tuple 的元

哈喽大家好,我是咸鱼UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

好久不见甚是想念,2023 年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢?UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

我们知道元组(tuple)是 Python 的内置数据类型,tuple 是一个不可变的值序列UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 的元素可以是任何类型,一般用在存储异构数据(例如数据库记录)的场景UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

那么今天这篇译文将带大家深入了解一下 tuple 以及它们的主要功能和示例(原文较长,我分成几个部分去讲)UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

原文链接:https://realpython.com/python-tuple/UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

前言

UHw28资讯网——每日最新资讯28at.com

tuple 是不可变的,可以存储固定数量的元素(也可以叫项目,item)UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

例如可以通过 tuple 来表示笛卡尔坐标(x,y)、RGB 颜色(red,green,blue)或者数据库表中的记录(name,age,job)UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 的一些特点如下:UHw28资讯网——每日最新资讯28at.com

有序:里面的元素可以按照顺序排列UHw28资讯网——每日最新资讯28at.com

轻量级:与列表等其他序列相比,tuple 消耗的内存要少UHw28资讯网——每日最新资讯28at.com

从零开始索引:可以从零开始索引访问里面的元素UHw28资讯网——每日最新资讯28at.com

不可变:不可以改变里面的元素UHw28资讯网——每日最新资讯28at.com

异构:可以存储不同数据类型的对象(包括可变对象)UHw28资讯网——每日最新资讯28at.com

可嵌套:tuple 里面可以包含 tupleUHw28资讯网——每日最新资讯28at.com

可迭代:能够遍历里面的元素UHw28资讯网——每日最新资讯28at.com

可切片:可以从元组中提取一系列元素UHw28资讯网——每日最新资讯28at.com

可组合:支持串联操作,可以使用串联运算符组合多个元组UHw28资讯网——每日最新资讯28at.com

可哈希:里面的元素都是不可变时可以用作字典的键UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

在 python 中,tuple 是有序的,这意味着其元素保持原始插入顺序,这个顺序在 tuple 的生命周期内保持不变UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

可以按位置或索引访问元组中的元素(从零开始)UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 创建

UHw28资讯网——每日最新资讯28at.com

tuple 是以逗号分隔的序列对象。要在元组中存储对象,需要一次创建包含其所有内容的元组对象UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

直接创建

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

需要注意的是,括号不是必需的,逗号才是。但是在大多数情况下括号可以提高代码的可读性UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

尽管括号对于定义大多数 tuple 不是必需的,但在创建空 tuple 时必须包含它们:UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

因为 tuple 是不可变的,所以创建空 tuple 之后无法往里面添加元素。到这里有小伙伴可能会问:既然这样为什么还要创建一个空 tuple?UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

例如现在有一个构建并返回 tuple 的函数,在一些情况下这个函数不会为生成的 tuple 创建元素,这样我们就需要返回一个空 tuple。以此来使得函数的返回值类型保持一致UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

除此之外,下面的情况也需要使用到括号UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

当我们使用 % 进行格式化输出的时候:UHw28资讯网——每日最新资讯28at.com

  • 第一种加括号:使用括在括号中的元组作为 % 运算符的右侧操作数,按预期工作
  • 第二种没加括号:报错

UHw28资讯网——每日最新资讯28at.com

我们创建单个元素的 tupleUHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

可以看到括号不是必需的,尾随逗号才是UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

使用 tuple() 创建

还可以使用 tuple() 从可迭代对象(列表、集合、字典或字符串)中创建 tuple,默认生成一个空 tupleUHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

通过集合来创建 tuple 时需要注意集合是无序的,会影响生成 tuple 中的元素的最终顺序UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

如果我们从一个迭代器对象中创建一个tuple,那么 tuple() 函数会使用迭代器逐个生成元素,然后将这些元素组合成一个元组并返回UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

又或者从生成器表达式中创建 tuple,生成器是一种特殊的迭代器UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 索引和切片

UHw28资讯网——每日最新资讯28at.com

tuple 中每一个元素都有一个整数索引,用于指定其在元组中的位置,索引从 0 开始UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

用不同的索引为 tuple 建立索引,可以直接访问相关的值。如果使用大 O 符号表示时间复杂度,那么可以说索引是一个O(1)操作UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

这意味着 tuple 非常适合需要快速访问序列中的特定项的情况UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

len() 函数返回 tuple 长度

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

如果使用大于或等于 tuple 长度的索引,则会报错UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

还可以使用负索引,负索引从右端开始数起UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

负索引对于所有 Python 序列(例如列表和字符串)都是通用的UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

如果使用负索引,则 -len(tuple_object) 将成为元组中的第一项。如果使用低于此值的索引,则会报错UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

对于嵌套 tuple,我们该如何访问到里面的元素?UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

答案是通过多层索引UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 切片

和其他序列一样,tuple 可以使用切片操作来提取其中的内容UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

[start:stop:step] 此构造的一部分称为切片运算符。它由一对方括号和三个可选索引组成:start 、 stop 和 stepUHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

其中第二个冒号不是必须的,如果 step为1的话就可以省略UHw28资讯网——每日最新资讯28at.com

IndexUHw28资讯网——每日最新资讯28at.com

DescriptionUHw28资讯网——每日最新资讯28at.com

Default ValueUHw28资讯网——每日最新资讯28at.com

startUHw28资讯网——每日最新资讯28at.com

指定要开始切片的索引(开区间)UHw28资讯网——每日最新资讯28at.com


UHw28资讯网——每日最新资讯28at.com

0UHw28资讯网——每日最新资讯28at.com

stopUHw28资讯网——每日最新资讯28at.com

指定希望切片停止提取元素的索引(闭区间)UHw28资讯网——每日最新资讯28at.com

len(tuple_object)UHw28资讯网——每日最新资讯28at.com

stepUHw28资讯网——每日最新资讯28at.com

提供一个整数值,表示切片在每个步骤中将跳过多少项UHw28资讯网——每日最新资讯28at.com

1UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 不可变特性

UHw28资讯网——每日最新资讯28at.com

Python 的 tuple 是不可变的,这意味着一旦你创建了一个 tuple,你就不能就地更改或更新它的元素,只能创建新的 tuple 对象UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

tuple 不可变的另一个含义是无法对其扩容缩容,与列表不同,元组没有.append() 、 .extend() .insert() .remove() 和 .clear() 方法UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

也不支持 del 语句UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

尽管 tuple 是不可变的,但是我们知道 tuple 里面可以存储任意类型的对象,包括可变对象UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

这意味着我们可以在 tuple 中存储列表、集合、字典等其他可变对象UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

student_info 中前两个元素是不可变的,最后一个是列表(可变),所以我们可以对其进行更改UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

又因为 tuple 是不可变的(可哈希),所以可以用作字典中的 keyUHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

如果用作 key 的 tuple 里面包含可变元素,则会报错UHw28资讯网——每日最新资讯28at.com

图片图片UHw28资讯网——每日最新资讯28at.com

UHw28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12240-0.html深挖 Python 元组 pt.1

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 三个杀手级VS Code插件

下一篇: 十个超级实用的IntelliJ IDEA插件

标签:
  • 热门焦点
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top