07. 元组

一、什么是元组

  元组(tuple)是 Python 中的一种序列结构,和列表类似,也是由一系列按特定顺序排列的元素组成,但它是不可变序列。因此,元组也可以称为不可变的列表。在形式上,元素的所有元素都放在一对“()”中,两个相邻元素间使用“,”分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放在元组中,并且在同一个元素中,元素的类型可以不同。

从元素和列表的定义上看,这两种结构比较相似,两者之间的主要区别为:元组是不可变序列,列表是可变序列。即元组的元素不可以单独修改,而列表可以任意修改。

二、元组的创建、删除和访问

2.1、元组的创建

【1】、使用 () 创建列表

  我们可以通过 () 来创建元组,同其它类型的 Python 变量一样,创建列表时,也可以使用赋值运算符“=”直接将一个元组赋值给变量,语法格式如下:

tuplename = (element1,element2,...)

  我们可以通过 () 来创建一个空元组:

names = ()
print(names)
print(type(names))

  在 Python 中,元组使用一对小括号将所有的内容括起来,但是小括号并不是必须的,只要将一组值用逗号分隔来,Python 就可以视其为元组。

names = ("Sakura","Mikoto","Shana")
print(names)
print(type(names))names = "Kikyō","Kagome","Moroha"
print(names)
print(type(names))

  如果要创建一个的元组只包含一个元素,则需要在定义元素时,在元素后面加一个逗号“,”。

names = "Sakura",
print(names)
print(type(names))names = ("Mikoto",)
print(names)
print(type(names))

创建元组的语法与创建列表的语法类似,只是创建列表时使用的是“[]”,而创建元组时使用的是“()”

【2】、使用 tuple() 方法创建元组

  在 Python 中,可以使用 tuple() 函数直接将可迭代对象转换为元组。

tuplename = tuple(data)

  其中,data 标识可以转换为列表的数据,其类型可以是 range 对象字符串元组 或者 其它 可迭代 类型的数据。

num = tuple(range(1,11))
print(num)
print(type(num))

2.2、元组的删除

  对于已经创建好的元组,不再使用时,可以使用 del 语句将其删除,语法格式如下:

del tuplename

  在删除元组前,一定要保证的输入的元组对象是已经存在的,否则会出现以下错误:

NameError: name 'names' is not defined

2.3、访问元组元素

  元组中的对象都会按照插入的顺序存储到元组中,第一个插入的对象保存到第一个位置,第二个保存在第二个位置。我们也可以通过 索引 的方式获取指定的元素。索引 是元素在元组中的位置,元组中的每一个元素都有一个索引。索引是 0 开始的整数,元组第一个位置索引为 0,第二个位置索引为 1,依次类推。它的语法格式如下:

tuplename[index]
names = ("Sakura","Mikoto","Shana")
print(names[0])
print(names[1])
print(names[2])

  如果使用的索引超过最大的索引会报以下错误:

IndexError: tuple index out of range

  在 Python 中索引可以是 负数。这个索引从右向左计数,也就是从最后的一个元素开始计数,即最后一个元素的索引是 -1,倒数第二个第二个元素的索引值为 -2,以此类推。

names = ("Sakura","Mikoto","Shana")
print(names[-1])
print(names[-2])
print(names[-3])

在采用负数做索引时,是从 -1 开始的,而不是从 0 开始的,即最后一个元素的下标为 -1,这是为了防止与第一个元素重合。

2.4、遍历元组

  遍历元组,指的就是将元组中的所有元素取出来,我们可以使用 for 循环直接遍历元组。for 循环的代码块会执行多次,序列中有几个元素就会执行几次,每执行依次就会将序列中的一个元素赋值给变量。

for item in tuplename:# 遍历元组操作
names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
for name in names:print(name)

  我们还可以使用 while 循环来遍历元组。

names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
i = 0
while i < len(names):print(names[i])i += 1

三、元组元素的查找

  在 Python 中,我们还可以使用 in 关键字检查某个元素是否为元组的成员,即检查某个元素是否包含在某个元组中。如果存在,返回 True,否则返回 False。

element in tuplename
names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
result = "Sakura" in names
print(result)

  另外,在 Python 中,我们还可以使用 not in 关键字实现检查某个元素是否不包含在指定的元组中。如果不在,返回 True,否则返回 False。

element not in tuplename
names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
result = "Sakura" not in names
print(result)

四、元组切片

  切片是从现有的元组中,获取一个新的元组,不会影响原有的元组。实现切片的语法格式如下:

tuplename[start : end : step]

  通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素。如果不指定起始位置,默认从 0 开始,如果不指定截至位置,默认为元组的长度。

  在进行切片操作时,如果指定了步长,那么将会按照步长遍历元组的元素,否则,将一个一个遍历元组。如果省略步长,默认为 1,最后的一个冒号也可以省略。

names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
name = names[1:5:2]
print(names)
print(name)# 如果省略步长,则默认步长为1
name = names[1:5]
print(name)# 如果省略截至位置,会一直截取到最后
name = names[1:]
print(name)# 如果省略开始位置,则会从第一个元素开始截取
name = names[:5]
print(name)

  如果想复制整个元组,可以将 起始位置截至位置 都省略,但是中间的冒号要保留。

names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
# 如果省略开始位置和截至位置,会复制一个元组
name = names[:]
print(names)
print(name)

  步长不能为 0, 但是可以为负数,如果是负数,将从元组的后部向前取元素。

names = ("Sakura","Mitoto","Shana","Kikyō","Kagome","Moroha")
# 步长如果是负数,则会从元组的后部向前面取元素
name = names[::-1]
print(names)
print(name)

五、元组的常用操作

【1】、元组相加

  在 Python 中,支持元组进行相加操作,即将两个元组进行拼接,不会去除重复的元素,使用加(+)运算符实现。语法格式如下:

names1 = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
names2 = ("Akame","Kurome","Sakura")
names = names1 + names2
print(names)

【2】、元组乘法

  在 Python 中,使用数字 n 乘以一个元组会生成一个新的元组。新元组的内容为原来元组被重复 n 次的结果。

names1 = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")
names2 = names1 * 3
print(names2)
在 Python 中,提供了内置函数计算元组的长度、最大值和最小值分别是:```python
len(s)		                        # 获取元组的长度
min(iterable, *, key=None)		# 返回元组中的最小元素
max(iterable, *, key=None)		# 返回元组中的最大元素
num = (12,43,121,34,64,322,46)
print("元组的长度为:", len(num))
print("元组中的最小元素为:", min(num))
print("元组中的最大元素为:", max(num))

【4】、获取指定元素出现的个数

  使用元组对象的 count() 方法可以获取指定元素在元组中出现的个数。这里只能进行精确的匹配,即不能是元素值的一部分。count() 方法的返回值就是元素在元组中出现的次数。它的语法格式如下:

tuplename.count(x)
names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha","Mikoto","Sakura")
print(names.count("Sakura"))

【5】、获取指定元素首次出现的下标

  使用元组对象的 index() 方法可以获取指定元素在元组中出现的位置(即索引)。基本语法格式如下:

tuplename.index(x[, start[, stop]])
names = ("Sakura","Mikoto","Shana","Kikyō","Sakura","Kagome","Moroha","Mikoto","Sakura")# 获取指定元素在元组中第一次出现的索引
print(names.index("Sakura"))# index()的第二个参数表示查找的起始位置
print(names.index("Sakura",5))# index()的第三个参数表示查找的结束位置
print(names.index("Sakura",3,5))

  如果获取元组中没有的元素或抛出如下异常:

ValueError: tuple.index(x): x not in tuple

六、元组解包

  解包(解构)就是将元组当中每一个元素都赋值给一个变量。

names = ("Sakura","Mikoto","Shana")
name1,name2,name3 = names
print(name1)
print(name2)
print(name3)

  我们还可以利用元组解包的特性,来实现两个变量的交换。

a = 10
b = 20
print("a = ",a)
print("b = ",b)# 利用元组的解包,交换两个变量的值
a,b = b,a
print("a = ",a)
print("b = ",b)

  在对一个元组进行解包时,变量的数量必须和元组中的元素数量一致,也可以在变量的前面添加一个 * 号,这样变量将会获取元组中剩余的元素。

names = ("Sakura","Mikoto","Shana","Kikyō","Kagome","Moroha")name1,name2,*name3 = names
print(name1)
print(name2)
print(name3)
print(type(name3))

不能同时出现两个或以上的 * 变量;

七、生成器表达式

  使用生成器表达式可以快速生成一个元组,它的表现形式和列表推导式类似,只是将列表推导式中的方括号 “[]” 修改为圆括号 “()”。

tuplename = (表达式 for 变量 in 可迭代对象 if 条件)
num = (value**2 for value in range(1,11))
print(num)
print(type(num))

  从上面的执行结果可以看出,使用生成器表达式生成的结果并不是一个元组或列表,而是一个生成器对象。这一点和列表推导式是不同的,这时需要我们可以把该生成器对象转换为元组或列表。其中,转换为元组需要使用 tuple() 函数,而转换为列表需要使用 list() 函数。

num = (value**2 for value in range(1,11))
num_list = list(num)
print(num_list)
print(type(num_list))
num = (value for value in range(1,11) if value % 2 == 0)
num_tuple = tuple(num)
print(num_tuple)
print(type(num_tuple))

八、列表与元组的区别

列表元组
列表属于可变序列,它的元素可以随时修改或删除元组属于不可变序列,其中的元素对应的内存地址不可以改变
列表可以使用 append()、extend()、insert()、remote()、pop() 等方法修改列表元素元组没有这些方法
列表可以通过使用切片访问和修改列表中的元素元组只支持通过切片访问元素,不支持修改
列表的访问和处理速度较慢元组的访问和处理速度较快
列表不能作为字典的键元组可以作为字典的键
persons = (["Sakura",10],["Mikoto",14])
print(persons)
print("id(persons[0]): ", id(persons[0]))
print("id(persons[1]): ", id(persons[1]))
print()persons[0][1] = 12
print(persons)
print("id(persons[0]): ", id(persons[0]))
print("id(persons[1]): ", id(persons[1]))

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

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

相关文章

c++趣味编程玩转物联网:基于树莓派Pico控制有源蜂鸣器

有源蜂鸣器是一种简单高效的声音输出设备&#xff0c;广泛应用于电子报警器、玩具、计时器等领域。在本项目中&#xff0c;我们结合树莓派Pico开发板&#xff0c;通过C代码控制有源蜂鸣器发出“滴滴”声&#xff0c;并解析其中涉及的关键技术点和硬件知识。 一、项目概述 1. 项…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化&#xff1f; 重要性&#xff1a;★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

路由引入中次优路由和路由环路问题

A公司用的是IS-IS&#xff0c;B公司用的是OSPF&#xff0c;现在这两个公司要合并&#xff0c;网络要相通 项目目标 前期准备 配置IP地址&#xff1a;完成IP地址规划&#xff0c;A公司和B公司内部网络通过路由器R2和R4环回接口模拟。配置路由器接口的IP地址并测试所有直连链路的…

shell脚本基础学习_总结篇(完结)

细致观看可以&#xff0c;访问shell脚本学习专栏&#xff0c;对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义&#xff1a; 2. 主要特点&#xff1a; 3. shell脚本的基本结构 4. S…

光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运行一个main即可运行&#xff0c;数据格式…

Postman定义公共函数

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman定义公共函数 在postman中&#xff0c;如下面的代码&#xff1a; 1、返回元素是否与预期值一致 var assertEqual(name,actual,expected)>{tests[…

SpringAI:Java 开发的智能新利器

一、SpringAI 简介 随着人工智能技术的飞速发展&#xff0c;越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架&#xff0c;使得这一集成过程变得前所未有的简单和高效。 本文将深入探…

javaweb-day02-JS(javascript)

1.JavaScript引入 &#xff08;1&#xff09;引入方式 2.JS语法 2.1 书写语法 2.2 变量 &#xff08;1&#xff09;var关键字定义的是全局变量&#xff1b; &#xff08;2&#xff09;可以重复声明&#xff1b; 2.3 数据类型&运算符 &#xff08;1&#xff09;数据类型…

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

Python语法基础(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

导入100道注会cpa题的方法,导入试题,自己刷题

一、问题描述 复习备考的小伙伴们&#xff0c;往往希望能够利用零碎的时间和手上的试题&#xff0c;来复习和备考 用一个能够导入自己试题的刷题工具&#xff0c;既能加强练习又能利用好零碎时间&#xff0c;是一个不错的解决方案 目前市面上刷题工具存下这些问题 1、要收费…

使用flink编写WordCount

1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 流程图&#xff1a; DataStream API开发 //nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/datastream/overview/ 添加依赖 <properties>&l…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

java全栈day10--后端Web基础(基础知识)

引言&#xff1a;只要能通过浏览器访问的网站全是B/S架构&#xff0c;其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址&#xff1a;Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程&#xff0c;建议…

elasticsearch的索引模版使用方法

5 索引模版⭐️⭐️⭐️⭐️⭐️ 索引模板就是创建索引时要遵循的模板规则索引模板仅对新创建的索引有效&#xff0c;已经创建的索引并不受索引模板的影响 5.1 索引模版的基本使用 1.查看所有的索引模板 GET 10.0.0.91:9200/_index_template2.创建自定义索引模板 xixi &…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

Linux自动化构建-make/Makefile

目录 1. 背景2. 基本使用3. 推导过程4. 好用的操作5. 拓展语法 1. 背景 会不会写makefile&#xff0c;从⼀个侧⾯说明了⼀个⼈是否具备完成⼤型⼯程的能⼒⼀个⼯程中的源⽂件不计数&#xff0c;其按类型、功能、模块分别放在若⼲个⽬录中&#xff0c;makefile定义了⼀系列的规…

Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)

目录 一、从官网上下载UR机械臂 二、给UR机械臂添加夹爪 三、报错解决 本文详细介绍如何在Ubuntu20.04ROS环境中为Universal Robots的UR机械臂添加夹爪。首先从官方和第三方源下载必要的软件包&#xff0c;包括UR机械臂驱动、夹爪插件和相关依赖。然后&#xff0c;针对gazeb…

C++11(下)

C11&#xff08;下&#xff09; 1.条件变量2.包装器&#xff08;重要&#xff09;3.bind &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【C的学习】 &#x1f4dd;&#x1f4…