iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中元组的概念及应用小结
  • 214
分享到

Python中元组的概念及应用小结

Python中元组概念Python中元组基本应用Python元组 2023-01-31 12:01:19 214人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.元组的概念2.元组的基本使用2.1.定义一个元组2.2.定义一个空元组2.3.元组的元素是不可变的2.4.当元组中的元素是一个列表时列表中的元素可变2.5.当元组中只定义一个

1.元组的概念

python中的元组和列表很相似,元组也是Python语言提供的内置数据结构之一,可以在代码中直接使用。

元组和列表就像是一个孪生兄弟,表现形式和使用上都大差不差,但是两者又有非常明显的区别:

  • 元组是用小括号表示的,列表的小括号还可以直接省略,而列表是使用中括号表示的,列表的中括号必须存在。
  • 元组的对象是不可变类型的,也就是说,一旦定义了元组,元组中的数据时不能进行更改的。
  • 列表中的对象是可变类型的,定义了列表之后,可以对列表中的数据进行增删改。

一个元组中也会定义很多个数据元素,每个数据元素也都可以通过索引的方式获取,也有正数、负数索引一说。

当一个元组中的数据元素是一个列表时,对于元素是不允许修改的,但是元素中列表的数据时可以被修改的,有种多维列表的概念,这个列表在元组中相当于一个子列表,这种情况在下面的操作中会进行演示。

问题来了,既然元组和列表那么的相似,为什么还要设计元组这种数据结构呢?

其实也并不难理解,元组的对象是不可变类型的,一旦创建了元组这种不可变类型的对象,对象中的所有数据将不能修改,也能够避免由于修改数据从而引发的Bug错误,此外,对于不可变类型的对象值,在多并发的环境下是不需要加的,因为它的数据不可能会被改变,因此多并发的时候就不需要加锁,从而避免并发1修改了数据并发2依旧是旧数据。

因此在程序中我们也要尽量使用不可变类型的对象。

当元组中存在一个列表对象时,为什么列表中的元素可以被修改?不是说元组的对象是不可变类型吗?

因为一个元组中有很多个元素,列表呢只属于其中的一个元素,对应一个索引,对于元组而言存储的是引用元素所在内存中的地址,存储引用的内存地址是不会被改变的,也就意味着元组中的元素定义好之后,不能再添加、删除元组中的对象元素,但是列表只是元组中的一个元素,即使修改列表的数据也不会对元组中的对象元素有改动,根据列表的特点以及列表有自己的数据结构,就可以对元组中元素为列表的对象进行修改。

2.元组的基本使用

在前面说了那么多的理论,例如元组用小括号表示,元组的特性等等,在本小结,我们通过案例来是验证。

2.1.定义一个元组

元组用小括号定义。

#定义一个元组
mytuple = ("jiangxl", 123, "python")
print(mytuple)

#输出结果:('jiangxl', 123, 'python')

定义元组时小括号可以省略。

mytuple = "jiangxl", 123, "python"
print(mytuple)

#输出结果:('jiangxl', 123, 'python')

image-20220731111547171

2.2.定义一个空元组

可以使用()表示一个空元组,也可以使用tuple()函数定义一个空元组

mytuple = ()
print(mytuple)

print(tuple())

image-20220731111933582

2.3.元组的元素是不可变的

元组中的对象元素是不可变的,已定义好的元组,其中的元素是不能被修改的,如下所示:

mytuple = ("jiangxl", 123, "python")

#尝试修改索引为1的元素
mytuple[1] = 678

直接回抛出错误:TypeError: ‘tuple’ object does not support item assignment

image-20220731113740690

2.4.当元组中的元素是一个列表时列表中的元素可变

当一个元组中的元素是一个列表时,这个列表相当于元组的一个元素,面向一个索引,此时这个列表相当于多维列表中子列表的概念,有自己的索引分布,因此当元组中的元素是列表时,这个列表中的元素可以改变。

元组会存储元素在内存中的地址,这个地址是不能被修改的,因此可以保证元素在元组中不会改变,但是列表是元组中的一个元素,这个元素对象不变就可以,至于元素中的元素就受列表的特性控制了。

#定义一个元组,其中索引1对应的元素是[1, 2, 3]列表
mytuple2 = ("jiangxl", [1, 2, 3], "python")

#修改[1, 2, 3]列表中1元素为123
'''
    首先找到[1, 2, 3]列表所在元组中的元素对应的索引:mytuple2[1]
    然后在找到元素1对应在列表中的索引:mytuple2[1][0]
'''
mytuple2[1][0] = 123

#打印元组的内容观察是否被修改
print(mytuple2)

#输出结果:('jiangxl', [123, 2, 3], 'python')

2.5.当元组中只定义一个元素时的注意事项

当在元素中只定义一个元素时,有一些注意事项,即使是只定义一个元素,也要在元组中至少包含一个逗号,否则Python就认为我们定义的并非是元组,只是一个字符串

1)定义元组中只有一个元素且不加逗号

当定义的元组中只有一个元素时,并且没有加逗号,此时Python认为这并不是一个元组,只是一个字符串,()括号也被认为是数学中的括号。

#元组中只有一个元素,且不添加逗号
mytuple = ("jiangxl")

#打印这个元组中的元素
print(mytuple)
#输出结果:jiangxl

#竟然只输出了一个字符串,并不是元组的形式,我们打印这个数据的类型
print(type(mytuple))
#输出结果:<class 'str'>
#发现只是一个字符串类型,并不是元组

2)定义元组中只有一个元素且加逗号

在元组()中只要有一个逗号,Python就认为这是一个元组。

mytuple = ("jiangxl",)

image-20220731133302282

3.列表的所有操作同样适用于元组

元组和列表很类似,几乎一样,只不过元组是不可变的类型,列表能实现的操作,也同样适用于元组。

理论就不再叙说了,不明白的去看前面列表这类操作的理论,说的非常明白了。

1)元组的切片

#元组的切片
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(mytuple[1:4])                 

#输出结果; (123, 'python', 111)

2)查询元组中某个元素的索引

#查询元组中某个元素的索引
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(mytuple.index(123))           

#输出结果;1

3)使用乘法运算符操作列表

#使用乘法运算符操作列表
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
mytuple2 = mytuple * 2
print(mytuple2)     

#输出结果:('jiangxl', 123, 'python', 111, 22, 45, 'abc', 'jiangxl', 123, 'python', 111, 22, 45, 'abc')

4)使用加法运算符操作列表

#使用加法运算符操作列表
mytuple3 = ("abc", "k8s", "jenkins")
mytuple4 = (123, 456, 789, 111)
print(mytuple3 + mytuple4)         

#输出结果:('abc', 'k8s', 'jenkins', 123, 456, 789, 111)

5)元组之间的比较

元组的比较也是基于元组中的所有元素都是数字的情况下,才能进行比较。

#元组的比较
mytuple5 = (1, 2, 3, 4)
mytuple6 = (1, 2, 5, 8, 9)
print(mytuple5 < mytuple6)

#输出结果:True

6)元组的反转

元组是不可变的类型,不能通过方法reverse实现元组的反转,因为调用类方法会修改元组本身的元素,所以只能通过reversed函数实现反转。

mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(list(reversed(mytuple)))            

#输出结果:['abc', 45, 22, 111, 'python', 123, 'jiangxl']

7)元组的排序

元组是不可变的类型,不能通过方法sort实现元组排序,因为调用类方法会修改元组本身的元素,所以只能通过sorted函数实现排序。

元组进行排序时,如果元组中存在字符串类型的元素,那么其他所有的元素无论什么类型,都需要单独用引号引起来,否则不能排序,会抛出错误。

mytuple = (1, 2, 5, 8, 9)
##升序
print(sorted(mytuple))                      
#输出结果:[1, 2, 5, 8, 9]

##降序
print(sorted(mytuple, reverse=True))            
#输出结果:[9, 8, 5, 2, 1]

4.就是想修改元组中的某个元素

元组的对象是不可变类型的,不允许增、删、改,但是我们就是想改元组的对象元素,也是有办法的。

  • 重新声明元组,对元素进行增删改
  • 使用切片截取元组中需要的元素,然后是还有加法运算符拼接新的对象元素。

第一种方法无需演示,懂得都会,重点看第二种方法。

这种方法的核心思想就是:利用切片(保留元组中想要的元素)+拼接(将多个切片的元组合并)的方式即可对元组中的元素改变。

需求:

​ (“jiangxl”, 123, “python”, 111, 22, 45, “abc”)

有一个元组,对象元素如上所示,我想删掉元组中的“22”和“45”这两个对象元素。

实现思路:

  • 我们都知道元组是不可变的类型,不允许修改其中的元素,但是我们就要反其道而行之,运用所学的知识实现这个需求。
  • 想删掉元组中的“22”和“45”这两个对象元素,可以使用切片的方式将这两个元素之外的元素从列表中切出来。
  • 由于这两个元素前后都有其他元素,一个切片截取22元素之前的其他元素,一个切片截取45元素之后的其他元素。
  • 最后通过加法运算符将两个切片合并在一起,形成一个新的元组,此时这个元组中就不包含22”和“45”这两个对象元素。通过切片+拼接的方法就可以将元组中的元素进行删除操作,如果是修改也是同样的方法:切片+拼接。

代码如下:

#定义初始元组
'''
    定义好初始元组后,突然想修改元组中的元素了,但是又不想去调整初始元组,故而通过切片+拼接的方法产生一个新的元组,也就相当于对元组的元素进行改变了。
    需求:删掉元组中的“22”和“45”这两个对象元素
'''
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")


'''
    使用切片截取22元素之前的其他元素,无需指定起始索引,从第一个元素处开始截取,指定结束索引为4
    索引4是元素22的索引,指定结束元素是4,结束元素不会被纳入切片
'''
mytuplestart = mytuple[:4]

'''
    22元素之前的全部元素都截取出来后,还要对45之后的元素进行截取,因为我们只是不想要22和45了,45之后还有其他的元素
    指定开始索引为6,索引为6的元素是abc,完美避开了22和45这两个元素,不指定结束索引,一直切片到最后一个元素
'''
mytuolestop = mytuple[6:]

'''
    使用加法运算符将两个切片拼接在一起,形成新的元组
'''
mytuplenew = mytuplestart + mytuolestop
print(mytuplenew)

#输出结果:('jiangxl', 123, 'python', 111, 'abc')

到此这篇关于Python中元组的概念以及应用的文章就介绍到这了,更多相关Python中元组概念内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中元组的概念及应用小结

本文链接: https://www.lsjlt.com/news/191777.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中元组的概念及应用小结
    目录1.元组的概念2.元组的基本使用2.1.定义一个元组2.2.定义一个空元组2.3.元组的元素是不可变的2.4.当元组中的元素是一个列表时列表中的元素可变2.5.当元组中只定义一个...
    99+
    2023-01-31
    Python中元组概念 Python中元组基本应用 Python元组
  • Mybatis基础概念与高级应用小结
    目录Mybatis基础回顾与高级应用引入依赖jdbc.propertiessqlMapConfig.xml案例一-查询用户案例二-添加用户案例三-编辑用户案例四-删除用户传统开发方式...
    99+
    2024-04-02
  • Python基础数据类型中tuple元组的概念和用法
    本篇内容主要讲解“Python基础数据类型中tuple元组的概念和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础数据类型中tuple元组的概念和用法”吧!目录元组简单介绍声明...
    99+
    2023-06-20
  • MySQL中外键的概念及实际应用
    MySQL中外键的概念及实际应用 一、外键的概念 在数据库设计中,外键是用来描述表与表之间关系的一种重要约束。外键用来确保在一个表中的某些列的值必须在另一个表中的相应列中有对应的值。外...
    99+
    2024-04-02
  • vue3中hooks的概述及用法小结
    目录一、 什么是hooks二、hooks的用法大家好,今天这篇文章是介绍一下vue3中的hooks以及它的用法。本文内容主要有以下两点: 什么是hooksvue3中hooks的使用方...
    99+
    2023-03-07
    vue3中hooks使用 vue3 hooks
  • Linux用户和用户组的概念及管理概述
    这篇文章主要介绍“Linux用户和用户组的概念及管理概述”,在日常操作中,相信很多人在Linux用户和用户组的概念及管理概述问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux用户和用户组的概念及管理概述...
    99+
    2023-06-13
  • Python基础数据类型tuple元组的概念与用法
    目录元组简单介绍 声明元组 元组与列表的区别 特殊的元组 元组的简写 元组常见运算操作 索引 [ ] 取值 切片 [ : : ] 取值 运算符 + 运算符 * 关键字 in 常见函数...
    99+
    2024-04-02
  • C语言数组的概念是什么及怎么应用
    这篇“C语言数组的概念是什么及怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言数组的概念是什么及怎么应用”文章吧...
    99+
    2023-06-30
  • C#枚举类型的概念及应用
    这篇文章主要讲解了“C#枚举类型的概念及应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#枚举类型的概念及应用”吧!C#枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一...
    99+
    2023-06-17
  • java中IO的概念及使用
    本篇内容主要讲解“java中IO的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!目录一.认识IOIO的分类IO的方式IO读写的方式IO的特性二.文件操作...
    99+
    2023-06-20
  • Java 数据结构之堆的概念与应用
    目录什么是堆堆的类型小根堆大根堆堆的基本操作:创建堆堆的时间复杂度和空间复杂度堆的应用-优先级队列概念优先级队列基本操作入优先级队列出优先级队列首元素java的优先级队列堆的常见面试...
    99+
    2024-04-02
  • PHP值解析:详解PHP中值的概念及应用
    PHP值解析:详解PHP中值的概念及应用 在PHP编程中,值是一个非常基础且重要的概念。在本文中,我们将深入探讨PHP中值的概念及其在实际编程中的应用。我们将从基本值类型,变量,数组,...
    99+
    2024-04-02
  • 【JAVA】 javaSE中的数组|数组的概念&使用
    数组的概念 什么是Java中的数组 数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。在java中,包含6个整形类型元素的数组,可以看做是酒店中连续的6个房间. 数组中存放的元素其类型相同 数组的空间是连在一起的 每个...
    99+
    2023-08-31
    java 开发语言
  • python中的变量概念及算术运算
    python是一种动态类型语言(动态类型语言:直接被解释器执行不需要进行编译) 程序运行当中变量可以绑定到不同类型的值.(变量:程序运行中可以发生变化的量)接下来我们用复利计算来说明一下python的这一个特性:price  = 1000;...
    99+
    2023-01-31
    算术 变量 概念
  • 阿里云移动端 ECS 的概念及应用
    阿里云移动端 ECS(Elastic ComputeService)是阿里云推出的一项移动云服务,旨在为移动应用程序提供高性能、可靠的计算资源和弹性扩展的能力。通过使用阿里云移动端ECS,开发人员可以轻松地在移动设备上部署和运行应用程序,...
    99+
    2024-01-16
    阿里 概念 ECS
  • Python中元组的基础介绍及常用操作总结
    目录1.元组的介绍2.访问元组3.修改元组(不可以修改的)4.元组的内置函数有count,index5.类型转换1.将元组转换为列表2.将元组转换为集合1.元组的介绍 Python...
    99+
    2024-04-02
  • 探讨Golang中宏的概念和应用
    在Golang中,宏(Macro)是一种高级编程技术,它可以帮助程序员简化代码结构并提高代码的可维护性。宏是一种源代码级别的文本替换机制,可以在编译过程中将宏代码片段替换为实际代码片段...
    99+
    2024-03-05
    应用 golang 代码可读性
  • python中的元组与列表及元组的更改
    目录1.列表(List)2.元组(Tuple)1.列表(List) 元组是由一对方括号构成的序列。列表创建后,可以根据自己的需要改变他的内容 >>> list=[1...
    99+
    2024-04-02
  • html内联元素和块级元素的基本概念及如何使用
    这篇“html内联元素和块级元素的基本概念及如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
  • PHP中heredoc的概念及作用是什么
    这篇文章主要讲解了“PHP中heredoc的概念及作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中heredoc的概念及作用是什么”吧!在php中,存在一种定义字符串的方法,...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作