定义

是 Python 中内置的不可变序列

在 Python 中使用()定义元组,元素与元素之间使用英文的逗号分隔。

元组中只有一个元素的时候,逗号也不能省略

元组的创建方式

(1)使用()直接创建元组

语法

元组名=(element1,element2,......elementN)
# 使用小括号创建元组
t=('he1lo',[10,20,30],'python','world')
print(t)

(2)使用内置函数tuple()创建元组

元组名=tuple(序列)
# 使用内置函数tuple()创建元组
t=tuple('helloworld')
print(t)

元组的一些操作

引入
t=tuple([10,20,30,40])
print(t)

 这个例子说明了元组也是属于序列的。

基本操作
t = tuple([10, 20, 30, 40])
print(t)print('10在元组中是否存在:', (10 in t))
print('10在元组不存在:', (10 not in t))
print('最大值:', max(t))
print('最小值:', min(t))
print('长度:', len(t))
print('t.index:', t.index(10))
print('t.count:', t.count(10))

  只有一个元素的情况
# 如果元组中只有一个元素
t=(10)
print(t,type(t))# 如果元组中只有一个元素,逗号不能省
y=(10,)
print(y,type(y))

 删除元组
del 元组名

元组的切片 
语法格式

元组切片的基本语法为:tuple [ start : stop : step ] ,其中:

tuple:表示要进行切片操作的元组。

start:指定切片的起始位置(包含该位置的元素),若省略start,则从元组的开头开始切片,默认值为 0。

stop:指定切片的结束位置(不包含该位置的元素),如果省略stop,则切片到元组的末尾

step:指定切片的步长,即每隔多少个元素取一个,step默认值为 1,表示依次取相邻元素。

示例 
# 定义原始元组
t = (10, 20, 30, 40, 50, 60, 70, 80, 90)# 1. 获取部分元素
print("1. 获取部分元素:")
print("t[1:4] = " + str(t[1:4]))      # 输出: (20, 30, 40)
print("t[:4] = " + str(t[:4]))        # 输出: (10, 20, 30, 40)
print("t[3:] = " + str(t[3:]))        # 输出: (40, 50, 60, 70, 80, 90)# 2. 指定步长
print("\n2. 指定步长:")
print("t[1:7:2] = " + str(t[1:7:2]))  # 输出: (20, 40, 60)
print("t[::2] = " + str(t[::2]))      # 输出: (10, 30, 50, 70, 90)# 3. 反向切片
print("\n3. 反向切片:")
print("t[::-1] = " + str(t[::-1]))    # 输出: (90, 80, 70, 60, 50, 40, 30, 20, 10)
print("t[7:2:-1] = " + str(t[7:2:-1]))  # 输出: (80, 70, 60, 50, 40)# 4. 负数索引示例
print("\n4. 负数索引示例:")
print("t[-3:] = " + str(t[-3:]))      # 输出: (70, 80, 90)    

当然也可以同时省略起始值、终止值和步长,但需要保留冒号分隔符

original = (1, 2, 3, 4, 5)
new_tuple = original[:]  # 省略起始值、终止值和步长print(new_tuple)        # 输出: (1, 2, 3, 4, 5)
print(new_tuple is original)  # 输出: False(证明是新对象)

这个用法的一些常见应用场景:

(1)创建副本

t = (1, 2, 3)
copy_t = t[:]  # 创建元组的副本

(2) 结合步长反转元组

reversed_t = t[::-1]  # 步长为-1,从后向前遍历,输出: (3, 2, 1)

Python 中,元组(tuple)和列表(list)的切片操作语法完全相同

 元组生成式

使用圆括号()包裹,并返回一个生成器对象。与列表推导式不同,元组生成式不会一次性生成所有元素,而是按需生成

基本语法
(表达式 for 变量 in 可迭代对象 [if 条件表达式])

表达式:对每个元素进行处理的计算逻辑,生成最终的值

for 变量 in 可迭代对象:遍历可迭代对象(如列表、元组、字符串等)中的每个元素。

if 条件表达式(可选):过滤元素,只对满足条件的元素执行表达式。

用例
#生成偶数元组
even_numbers = (x for x in range(10) if x % 2 == 0)
print(tuple(even_numbers))  # 输出: (0, 2, 4, 6, 8)#计算平方元组
squares = (x**2 for x in [1, 2, 3, 4, 5])
print(tuple(squares))  # 输出: (1, 4, 9, 16, 25)#字符串长度元组
words = ["apple", "banana", "cherry"]
lengths = (len(word) for word in words)
print(tuple(lengths))  # 输出: (5, 6, 6)
**注意

(1)生成器对象:元组生成式返回的是生成器对象,需要通过 tuple() 转换为元组或迭代使用。 

(2)一次性使用:生成器对象只能遍历一次,再次遍历时会耗尽。

(3)内存效率:适合处理大量数据,避免一次性加载全部元素到内存。

元组与列表的区别

元组列表
不可变序列
无法实现添加、删除和修改元素等操作
可变序列
append ()、insert ()、remove ()、pop () 等方法实现添加和删除列表元素
支持切片访问元素,不支持修改操作支持切片访问和修改列表中的元素
访问和处理速度快访问和处理速度慢
可以作为字典的键不能作为字典的键

元组的遍历 

1、for 循环直接遍历元素
tup = (10, 20, "hello", 3.14)
for element in tup:print(element)

2、结合 enumerate 遍历

语法结构

for 索引变量, 值变量 in enumerate(可迭代对象):# 循环体,使用 索引变量 和 值变量print(f"索引: {索引变量}, 值: {值变量}")

可以同时取到元素以及对应索引(位置)

tup = (10, 20, "hello", 3.14)
for index, element in enumerate(tup):print(f"索引 {index},元素 {element}")

3、 通过索引遍历(range + len)

range 的语法格式

#括号内只有一个值的情况
#默认输出从 0 开始,到倒数第一个元素(意思就是不包含结束值)的整数序列。
range(stop)
#示例
for i in range(5):print(i)  # 输出: 0, 1, 2, 3, 4#完整格式
range(start, stop, step)
#示例
# 正向,步长2
for i in range(0, 10, 2):print(i)  # 输出: 0, 2, 4, 6, 8
# 反向,步长-1
for i in range(5, 0, -1):print(i)  # 输出: 5, 4, 3, 2, 1

 先获取元组的长度,再用 range 生成索引序列,再通过索引来访问元素,适合需要精确控制索引的场景。

tup = (10, 20, "hello", 3.14)
for i in range(len(tup)):print(tup[i])

大家会发现这几种遍历方式都有 for...in 结构,这是因为列表、元组、字符串等都是 “可迭代对象”,它们内部实现了迭代器协议(即包含 __iter__() 方法)。for...in 循环的底层逻辑就是通过调用对象的迭代器,依次获取元素,直到遍历结束。

那这几种遍历方式可以简记为:

1、最基本方式:for + 变量 + in + 可迭代对象;

适用场景:只需元素值,不需要索引。

2、enumerate方式:for + 索引变量,值变量 + in + 可迭代对象;

适用场景:需要同时使用索引和元素值。

3、for + 变量 + in + range(len(可迭代对象));

适用场景:需要手动控制索引。

基于 range 方式的拓展 -- 反向遍历跳步遍历:

通过结合 range 的参数:

fruits = ["apple", "banana", "cherry"]# 反向遍历(从后往前)
for i in range(len(fruits)-1, -1, -1):  # 从最后一个索引到0,步长-1print(fruits[i])  # 输出: cherry, banana, apple# 跳步遍历(每隔一个元素取一次)
for i in range(0, len(fruits), 2):  # 从0开始,步长2print(fruits[i])  # 输出: apple, cherry

今天的分享就到这里啦~

谢谢大家的观看!!

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

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

相关文章

工业相机GigE数据接口的优势及应用

工业相机不同的数据接口适用的应用场景也不同,选择合适的数据额接口,可大大提高效率。今天我们来看看常见的GigE接口的优势及应用。基于GigE Vision标准的千兆以太网(GigE)相机通过提供快速、灵活且成本效益高的成像解决方案&…

【53】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码

文章目录1 完整 功能展示2 添加控件变量及声明2.1 添加控件及变量2.2 SerialPortDlg.h: 头文件3 函数实现3.1 数据发送3.1.2 写数据、字符串转3.2 发送文件3.2.1 打开文件3.2.2 发送文件3.3 清空发送区4 完整MFC项目项下载1 完整 功能展示 串口通信助手 页面展示,功…

算法学习笔记:27.堆排序(生日限定版)——从原理到实战,涵盖 LeetCode 与考研 408 例题

堆排序(Heap Sort)是一种基于二叉堆数据结构的高效排序算法,由计算机科学家 J. W. J. Williams 于 1964 年提出。它结合了选择排序的思想和二叉堆的特性,具有时间复杂度稳定(O (nlogn))、原地排序&#xff…

I/O 多路复用select,poll

目录 I/O多路复用的介绍 多进程/多线程模型的弊端 网络多路复用如何解决问题? 网络多路复用的常见实现方式 常见的开源网络库 select详细介绍 select函数介绍 套接字可读事件,可写事件,异常事件 fd_set类型介绍 select的两次拷贝,两次遍历 se…

最终分配算法【论文材料】

文章目录一、最终分配算法1.1 平衡的情况1.2 不平衡的情况1.3 TDM 约束一、最终分配算法 上一步合法化后,group 的 TDM 情况大致分为两类,一类是平衡的,最大的一些 group 的 TDM 比较接近。另外一种情况就是不平衡的,最大的 group…

《大数据技术原理与应用》实验报告七 熟悉 Spark 初级编程实践

目 录 一、实验目的 二、实验环境 三、实验内容与完成情况 3.1 Spark读取文件系统的数据。 3.2 编写独立应用程序实现数据去重。 3.3 编写独立应用程序实现求平局值问题。 四、问题和解决方法 五、心得体会 一、实验目的 1. 掌握使用 Spark 访问本地文件和 HDFS 文件的…

机器学习漫画小抄 - 彩图版

斯坦福机器学习漫画小抄,中文版来啦! 下载地址: 通过网盘分享的文件:机器学习知识点彩图版.pdf 链接: https://pan.baidu.com/s/1-fH9OpC_u_OrTqWy6gVUCA 提取码: 246r

1.初始化

业务模块核心技术栈业务(亮点)解决方案课程安排01 认识Vue3为什么需要学Vue3?Vue3组合式API体验Vue3更多的优势2 使用create-vue搭建Vue3项目认识 create-vue使用create-vue创建项目3 熟悉项目目录和关键文件项目目录和关键文件4 组合式API - setup选项…

Milvus分布式数据库工作职责

主导腾讯云Milvus服务化项目,设计多租户隔离方案,支撑日均10亿向量请求,延迟降低40%。优化IVF_PQ索引构建流程,通过量化编码压缩使内存占用减少60%,QPS提升35%。开发基于Kubernetes的Milvus Operator,实现自…

FMEA-CP-PFD三位一体数字化闭环:汽车部件质量管控的速效引擎

FMEA-CP-PFD三位一体数字化闭环:汽车部件质量管控的速效引擎 全星FMEA软件系统通过​​FMEA(失效模式分析)、CP(控制计划)、PFD(过程流程图)三大工具的一体化协同管理​​,为汽车部件…

VUE2 学习笔记1

目录 VUE特点 文档tips 开发者工具 从一个Hello world开始 hello world Demo 容器和实例的对应关系 差值语法{{}} VUE特点 构建用户界面:可以用来把数据构建成用户界面。 渐进式:自底向上,可以先从一个非常轻量级的框架开始&#xf…

嵌入式学习系统编程(四)进程

目录 一、进程 1.程序和进程 2.进程的八种状态 3. 几个状态 4.关于进程常用命令 二、关于进程的函数 1.fork 2.面问 3.孤儿进程 后台进程 2. exec函数族 (只保留父子关系,做新的事情) strtok函数 三、进程的结束 1.分类 exit和_exit的区别 wait函数…

Linux中添加重定向(Redirection)功能到minishell

前言:在谈论添加minishell之前,我再重谈一下重定向的具体实现等大概思想!!!方便自己回顾!!! 目录 一、重定向(Redirection)原理详解 1、文件描述符基础 2、…

Django由于数据库版本原因导致数据库迁移失败解决办法

在django开发中,一般我们初始化一个项目之后,创建应用一般就会生成如下的目录:django-admin startproject myproject python manage.py startapp blogmyproject/ ├── manage.py └── myproject/ | ├── __init__.py | ├── se…

C++STL系列之vector

前言 vector是变长数组,有点像数据结构中的顺序表,它和list也是经常被拿出作对比的, vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小,如果扩容,因为要开一个新数组把…

Functional C++ for Fun Profit

Lambda Conf上有人讲C函数式编程。在Functional Conf 2019上,就有主题为“Lambdas: The Functional Programming Companion of Modern C”的演讲。演讲者介绍了现代C中函数式编程相关内容,讲解了如何使用Lambda表达式编写符合函数式编程原则的C代码&…

Python基础理论与实践:从零到爬虫实战

引言Python如轻舟,载你探寻数据宝藏!本文从基础理论(变量、循环、函数、模块)启航,结合requests和BeautifulSoup实战爬取Quotes to Scrape,适合零基础到进阶者。文章聚焦Python基础(变量、循环、…

ThingJS开发从入门到精通:构建三维物联网可视化应用的完整指南

文章目录第一部分:ThingJS基础入门第一章 ThingJS概述与技术架构1.1 ThingJS平台简介1.2 技术架构解析1.3 开发环境配置第二章 基础概念与核心API2.1 核心对象模型2.2 场景创建与管理2.3 对象操作基础第三章 基础开发实战3.1 第一个ThingJS应用3.2 事件系统详解3.3 …

关于list

1、什么是listlist是一个带头结点的双向循环链表模版容器,可以存放任意类型,需要显式定义2、list的使用有了前面学习string和vector的基础,学习和使用list会方便很多,因为大部分的内容依然是高度重合的。与顺序表不同,…

Mysql 查看当前事务锁

在 MySQL 中查看事务锁(锁等待、锁持有等),可以使用以下方法: 一、查看当前锁等待情况(推荐) SELECTr.trx_id AS waiting_trx_id,r.trx_mysql_thread_id AS waiting_thread,r.trx_query AS waiting_query,b…