百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python tuple元组详解

off999 2024-11-27 18:43 45 浏览 0 评论

元组(tuple)是 Python 中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成。
元组和列表(list)的不同之处在于:

· 列表的元素是可以更改的,包括修改元素值,删除和插入元素,所以列表是可变序列;

· 而元组一旦被创建,它的元素就不可更改了,所以元组是不可变序列。

元组也可以看做是不可变的列表,通常情况下,元组用于保存无需修改的内容。
从形式上看,元组的所有元素都放在一对小括号
( )中,相邻元素之间用逗号,分隔,如下所示:

(element1, element2, ... , elementn)

其中 element1~elementn 表示元组中的各个元素,个数没有限制,只要是 Python 支持的数据类型就可以。
从存储内容上看,元组可以存储整数、实数、字符串、列表、元组等任何类型的数据,并且在同一个元组中,元素的类型可以不同,例如:

("Python", 1, [2,'a'], ("abc",3.0))

在这个元组中,有多种类型的数据,包括整形、字符串、列表、元组。
另外,我们都知道,列表的数据类型是 list,那么元组的数据类型是什么呢?我们不妨通过 type() 函数来查看一下:

>>> type( ("python",1,[2,'a'],("abc",3.0)) )
<class 'tuple'>

可以看到,元组是 tuple 类型,这也是很多教程中用 tuple 指代元组的原因。

Python创建元组

Python 提供了两种创建元组的方法,下面进行一一介绍。

1) 使用 ( ) 直接创建

通过( )创建元组后,一般使用=将它赋值给某个变量,具体格式为:

tuplename = (element1, element2, ..., elementn)

其中,tuplename 表示变量名,element1 ~ elementn 表示元组的元素。
例如,下面的元组都是合法的:

1. num = (7, 14, 21, 28, 35)

2. course = ("Python教程", "C#教程")

3. abc = ("Python", 19, [1,2], ('c',2.0))

在 Python 中,元组通常都是使用一对小括号将所有元素包围起来的,但小括号不是必须的,只要将各元素用逗号隔开,Python 就会将其视为元组,请看下面的例子:

1. course = "Python教程", "C#教程","Java教程"

2. print(course)

运行结果为:

('Python教程', 'c#教程', 'Java教程')

需要注意的一点是,当创建的元组中只有一个字符串类型的元素时,该元素后面必须要加一个逗号,,否则 Python 解释器会将它视为字符串。请看下面的代码:

1. #最后加上逗号

2. a =("Python元组实例",)

3. print(type(a))

4. print(a)

5.

6. #最后不加逗号

7. b = ("Python字符串实例")

8. print(type(b))

9. print(b)

运行结果为:

<class 'tuple'>
('
Python元组实例',)
<class 'str'>
Python字符串实例

最终结果显示,只有变量 a 才是元组,后面的变量 b 是一个字符串。
2) 使用tuple()函数创建元组

除了使用( )创建元组外,Python 还提供了一个内置的函数 tuple(),用来将其它数据类型转换为元组类型。
tuple() 的语法格式如下:

tuple(data)

其中,data 表示可以转化为元组的数据,包括字符串、元组、range 对象等。
tuple() 使用示例:

1. #将字符串转换成元组

2. tup1 = tuple("hello")

3. print(tup1)

4.

5. #将列表转换成元组

6. list1 = ['Python', 'Java', 'C++', 'JavaScript']

7. tup2 = tuple(list1)

8. print(tup2)

9.

10. #将字典转换成元组

11. dict1 = {'a':100, 'b':42, 'c':9}

12. tup3 = tuple(dict1)

13. print(tup3)

14.

15. #将区间转换成元组

16. range1 = range(1, 6)

17. tup4 = tuple(range1)

18. print(tup4)

19.

20. #创建空元组

21. print(tuple())

运行结果为:

('h', 'e', 'l', 'l', 'o')
('Python', 'Java', 'C++', 'JavaScript')
('a', 'b', 'c')
(1, 2, 3, 4, 5)
()

Python访问元组元素

和列表一样,我们可以使用索引(Index)访问元组中的某个元素(得到的是一个元素的值),也可以使用切片访问元组中的一组元素(得到的是一个新的子元组)。
使用索引访问元组元素的格式为:

tuplename[i]

其中,tuplename 表示元组名字,i 表示索引值。元组的索引可以是正数,也可以是负数。
使用切片访问元组元素的格式为:

tuplename[start : end : step]

其中,start 表示起始索引,end 表示结束索引,step 表示步长。
以上两种方式我们已在《
Python序列》中进行了讲解,这里就不再赘述了,仅作示例演示,请看下面代码:

1. url = tuple("Python元组使用下标访问其中的元素")

2.

3. #使用索引访问元组中的某个元素

4. print(url[3]) #使用正数索引

5. print(url[-4]) #使用负数索引

6.

7. #使用切片访问元组中的一组元素

8. print(url[9: 18]) #使用正数切片

9. print(url[9: 18: 3]) #指定步长

10. print(url[-6: -1]) #使用负数切片

运行结果:

Python修改元组

前面我们已经说过,元组是不可变序列,元组中的元素不能被修改,所以我们只能创建一个新的元组去替代旧的元组。
例如,对元组变量进行重新赋值:

1. tup = (100, 0.5, -36, 73)

2. print(tup)

3. #对元组进行重新赋值

4. tup = ('交互方式',"程序执行方式")

5. print(tup)

运行结果为:

(100, 0.5, -36, 73)
('交互方式', '程序执行方式')

另外,还可以通过连接多个元组(使用+可以拼接元组)的方式向元组中添加新元素,例如:

1. tup1 = (100, 0.5, -36, 73)

2. tup2 = (3, -54.6, 99)

3. print(tup1+tup2)

运行结果为:

(100, 0.5, -36, 73, 3, -54.6, 99)

你看,使用+拼接元组以后,tup1 和 tup2 的内容没法发生改变,这说明生成的是一个新的元组。

Python删除元组

当创建的元组不再使用时,可以通过 del 关键字将其删除,例如:

1. tup = ('Java教程',"Python教程")

2. print(tup)

3. del tup

4. print(tup)

运行结果为:

('Java教程', ' Python教程')
Traceback (most recent call last):
File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in <module>
print(tup)
NameError: name 'tup' is not defined

Python 自带垃圾回收功能,会自动销毁不用的元组,所以一般不需要通过 del 来手动删除。

相关推荐

apisix动态修改路由的原理_动态路由协议rip的配置

ApacheAPISIX能够实现动态修改路由(DynamicRouting)的核心原理,是它将传统的静态Nginx配置彻底解耦,通过中心化配置存储(如etcd)+OpenRest...

使用 Docker 部署 OpenResty Manager 搭建可视化反向代理系统

在之前的文章中,xiaoz推荐过可视化Nginx反向代理工具NginxProxyManager,最近xiaoz还发现一款功能更加强大,界面更加漂亮的OpenRestyManager,完全可以替代...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

OpenResty 的 Lua 动态能力_openresty 动态upstream

OpenResty的Lua动态能力是其最核心的优势,它将LuaJIT嵌入到Nginx的每一个请求处理阶段,使得开发者可以用Lua脚本动态控制请求的生命周期,而无需重新编译或rel...

LVS和Nginx_lvs和nginx的区别

LVS(LinuxVirtualServer)和Nginx都是常用的负载均衡解决方案,广泛应用于大型网站和分布式系统中,以提高系统的性能、可用性和可扩展性。一、基本概念1.LVS(Linux...

外网连接到内网服务器需要端口映射吗,如何操作?

外网访问内网服务器通常需要端口映射(或内网穿透),这是跨越公网与私网边界的关键技术。操作方式取决于网络环境,以下分场景详解。一、端口映射的核心原理内网服务器位于私有IP地址段(如192.168.x.x...

Nginx如何解决C10K问题(1万个并发连接)?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。Nginx是大型架构的必备中间件,下面我就全面来详解NginxC10k问题@mikechen文章来源:mikec...

炸场!Spring Boot 9 大内置过滤器实战手册:从坑到神

炸场!SpringBoot9大内置过滤器实战手册:从坑到神在Java开发圈摸爬滚打十年,见过太多团队重复造轮子——明明SpringBoot自带的过滤器就能解决的问题,偏偏要手写几十...

WordPress和Typecho xmlrpc漏洞_wordpress主题漏洞

一般大家都关注WordPress,毕竟用户量巨大,而国内的Typecho作为轻量级的博客系统就关注的人并不多。Typecho有很多借鉴WordPress的,包括兼容的xmlrpc接口,而WordPre...

Linux Shell 入门教程(六):重定向、管道与命令替换

在前几篇中,我们学习了函数、流程控制等Shell编程的基础内容。现在我们来探索更高级的功能:如何控制数据流向、将命令链接在一起、让命令间通信变得可能。一、输入输出重定向(>、>>...

Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂

刚配完nginx网站就崩了?运维和开发都头疼的location匹配规则优先级,弄错顺序直接导致500错误。核心在于nginx处理location时顺序严格:先精确匹配=,然后前缀匹配^~,接着按顺序正...

liunx服务器查看故障命令有那些?_linux查看服务器性能命令

在Linux服务器上排查故障时,需要使用一系列命令来检查系统状态、日志文件、资源利用情况以及网络状况。以下是常用的故障排查命令,按照不同场景分类说明。1.系统资源相关命令1.1查看CPU使...

服务器被入侵的常见迹象有哪些?_服务器入侵可以被完全操纵吗

服务器被入侵可能会导致数据泄露、服务异常或完全失控。及时发现入侵迹象能够帮助你尽早采取措施,减少损失。以下是服务器被入侵的常见迹象以及相关的分析与处理建议。1.服务器被入侵的常见迹象1.1系统性能...

前端错误可观测最佳实践_前端错误提示

场景解析对于前端项目,生产环境的代码通常经过压缩、混淆和打包处理,当代码在运行过程中产生错误时,通常难以还原原始代码从而定位问题,对于深度混淆尤其如此,因此Mozilla自2011年开始发起并...

8个能让你的Kubernetes集群“瞬间崩溃”的配置错误

错误一:livenessProbe探针“自杀式”配置——30秒内让Pod重启20次现象:Pod状态在Running→Terminating→CrashLoopBackOff之间循环,重启间隔仅...

取消回复欢迎 发表评论: