比List更安全的数据类型

大家好,今天为大家介绍一种更为安全的Python内置数据类型:tuple(元组),以及它的基础用法

元组是什么

元组(tuple)是另一种有序的数据类型,与list比较类似。主要不同的一点是tuple被创建后就不能对其进行修改。所以,tuple与list不同,没有append(),pop(),insert()这些方法可以使用。获取元素的方法和list是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。

因为 tuple不可变,所以代码更安全。如果可以的话,我们尽量使用tuple代替list。

创建元组

# 定义一个空的tuple

t = ()

print(t)

Out:()

只有1个元素的元组在进行定义的时候,需要加一个逗号 , 来消除歧义,否则定义的就不是一个元组而是元素本身

t1 = (5)

t2 = (5, )

print(t1)

print(t2)

Out: 5

(5,)

tup4 = (1, 2, 3, 4, 5 ); # 创建时直接赋值

tup5 = "a", "b", "c", "d"; # 创建时直接赋值

print(tup4)

print(tup5)

Out:(1, 2, 3, 4, 5)

('a', 'b', 'c', 'd')

一旦创建完,比如tup4 和 tup5 这两个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和List是一样的,我们可以正常地使用tup4[0],tup5[-1],但不能赋值成另外的元素

访问元组

访问元组和List基本一样,我们可以用切片很容易的查看元组中的元素,这里不多说,看个小栗子:

tup4 = (1, 2, 3, 4, 5 );

tup5 = "a", "b", "c", "d";

print(tup4[0])

print(tup5[1:3])

print(tup5[::-1])

print(sorted(tup5,reverse=True)) # 使用sorted结果变成了List

Out: 1

('b', 'c')

('d', 'c', 'b', 'a')

['d', 'c', 'b', 'a']

理解元组的不可变

上面已经说过了,元组是不可变的,让我们来看下面这个小栗子:

test=('a','b',[1,2,3])

print(test)

test[2][0]=100

print(test)

Out: ('a', 'b', [1, 2, 3])

('a', 'b', [100, 2, 3])

不知道有没有朋友会有疑问? 你不是说元组不能变嘛,这里怎么回事,test元组的第三个元素是List,这里我们修改了List的值结果不是变了吗?

这里要给大家说明一下,tuple不可变指的是指向不变,也就是说test[2]永远指向List[1,2,3],这里是因为List可变,所以我们才能修改为[100,2,3],但是改变前后test[2]的指向没有发生任何变化,如果我们想要直接改变test[2]的值,就会发现如下错误

test[2]=[100,2,3]

Out: TypeError: 'tuple' object does not support item assignment

理解了“指向不变”后,如果我们需要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

元组的连接

如前面所说,元组是不可改的,但是可以连接,我们可以使用 + 对元组进行连接:

t1 = (2,3,5)

t2 = ('ricequant','python')

t3 = t1 + t2

print(t3)

Out:(2, 3, 5, 'ricequant', 'python')

元组的删除

元组中的元素不能被删除,但是我们可以使用 del 删除整个元组,删除后可以重新定义,非常简单,不多说啦

person = ('xiaobai',18,'paris')

print(person)

del person

print(person)

Out: ('xiaobai', 18, 'paris')

NameError: name 'person' is not defined

元组的解包

这里是比较有意思的地方,假设我们有一个元组t如下:

t = ('foo', 'bar', 'baz', 'qux')

当我们创建 t 时,实际上就是一个打包,过程展示如下图:

那如果是解包呢? 换过来就行了呀

t = ('foo', 'bar', 'baz', 'qux')

(s1, s2, s3, s4) = t

print(s1,s2,s3,s4)

Out:foo bar baz qux

当我们执行(s1, s2, s3, s4) = t的时候,实际发生的情况如下:

这里注意一点,如果我们尝试解包一个元祖是传递的变量和元组实际元素数量不相符时会产生错误:

(s1, s2, s3) = t

ValueError: too many values to unpack (expected 3)

(s1, s2, s3, s4, s5) = t

ValueError: not enough values to unpack (expected 5, got 4)

元组的互换swap

其实Python里面还有一种非常简单的创建元组的方法,那就是逗号,我们如果用逗号分隔一些元素,会自动生成一个元组:

a = 'foo'

b = 'bar'

x= a, b

print(x)

Out:('foo', 'bar')

如果做一个简单的互换很容易,只要这样就可以了:

x= b,a

print(x)

Out:('bar', 'foo')

元组的常用方法汇总

tup.index(x, [start, [stop]])) 返回元组中start到stop索引中第一个值为 x的元素在整个列表中的索引。如果没有匹配的元素就会返回一个错误。

tup.count(x) 返回 x 在元组中出现的次数。

cmp(tuple1, tuple2) 比较元组中两个元素。

len(tuple) 计算元组元素个数。

max(tuple) 返回元组中元素最大值。

min(tuple) 返回元组中元素最小值。

tuple(seq) 将列表转换为元组。

元组不提供字符串、列表和字典中的方法。如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。

总结

今天为大家讲解了我知道的有关tuple的一切,也为大家展示了一些常规操作,希望能够帮助到大家,马上就要到初五了,迎财神,吃饺子!!! 希望大家在2019大吉大利,大发横财!!

pythontuple([1、2、3)_Python 进阶之路 (三) Tuple元组使用指南相关推荐

  1. python英译汉库模块_Python 进阶之路-翻译模块

    Python 进阶之路-翻译模块 作者:nango  阅读:1749次  来源:原创  时间:2017-07-14 17:09 Git 地址 [python 翻译模块](https://github. ...

  2. python 有趣的变量_Python进阶之路 3.2有趣的赋值操作

    3.2 有趣的赋值操作 赋值操作是再简单不过了,在前面的章节也多次使用了赋值操作.不过Python语言中的赋值操作要有趣得多.例如,可以同时将多个值赋给多个变量. x,y,z = 1,2,3 prin ...

  3. python123m与n的数学运算_python小白进阶之路三——循环结构入门练习+Random库练习...

    文章目录 ==资源下载与使用== 输出水仙花数 100以内的素数之和 计算输入数的奇偶数之和与平均数 计算s=a+aa+aaa+-+aaa-aaa的值 有3个数字:1.2.3,能组成多少个互不相同且无 ...

  4. python flag用法_Python 进阶之路 (四) 先立Flag, 社区最全的Set用法集锦

    Set是什么 大家好,恰逢初五迎财神,先预祝大家新年财源滚滚!! 在上一期详解tuple元组的用法后,今天我们来看Python里面最后一种常见的数据类型:集合(Set) 与dict类似,set也是一组 ...

  5. python的print函数用逗号分隔时输出不用空格_Python进阶之路 3.1 神奇的print函数

    3.1 神奇的print函数 相信大家对print函数一定不陌生,因为在前面的章节,几乎每个例子都使用了print函数,这个函数的功能就是在控制台输出文本.不过print在输出文本时可以进行一些设置, ...

  6. pythontuple数据类型_Python基础教程2d–数据类型-tuple(元组)

    1定义 tuple(元组)也是一种顺序结构的数据类型,定义一个空元组的方法用英文小括号: 变量名=() t = () 定义一个包含了多个元素的元组在小括号中用逗号分隔开各个元素: 源码print('\ ...

  7. Python 进阶之路 (十二) 尾声即是开始

    Python进阶之路总结 大家好,我的<< Python进阶之路>>到这一期就到此为止了,和 <<Python 基础起步>>不同,在掌握了一些基础知识后 ...

  8. [转]工程师进阶之路(三)

    2019独角兽企业重金招聘Python工程师标准>>> 工程师进阶之路 三 再谈沟通的策略 什么叫做策略,我的认识就是做事情的方法,有些时候光有很好的原则,而没有好的方法也是不行的. ...

  9. python处理pdf实例_Python实战-从菜鸟到大牛的进阶之路pdf_Python教程

    资源名称:Python实战-从菜鸟到大牛的进阶之路 pdf 第1章 Python 处理 cassandra 升级后的回滚脚本 第 2 章 多套方案来提高 python web 框架的并发处理能力 第 ...

最新文章

  1. MySQL数据库中创建表并给某个字段添加数据
  2. 大数据时代的新型数据库 — 图数据库 Neo4j 的应用
  3. 微信为什么不丢消息?
  4. 【转】采购提前期概述
  5. zigbee绑定 使用_遇见-果加智能锁F2——使用体验
  6. Chinaren,逐渐变为垃圾了。
  7. i5老是显示无服务器,为什么懂电脑的人选择买i5处理器,而不是i7,背后的真实原因?...
  8. 格林威治时间(Tue Jan 01 00:00:00 CST 2019)[ Date ]转化 为 [ 2019-01-01 10:10:10 ]
  9. saltstack远程操作WINDOWS的POWERSHELL脚本
  10. 洛谷——P1830 轰炸III
  11. 字符转获取拼音首字母php实现
  12. 石头扫地机器人音量怎么调_石头的新扫地机器人 T6,内外都有升级
  13. python构建网站flask_某课Python Flask实现构建视频网站
  14. python的安装以及使用和文本编译器的安装使用
  15. 例如微博表情添加到textView中
  16. GitHub:基于搜狗微信搜索的微信公众号爬虫接口
  17. oracle新增字段时提示数据类型不正确
  18. Matrix Factorization
  19. 基于ssm小说阅读安卓APP项目
  20. 最新公布!“中国开发者大调查”第二批中奖名单出炉啦

热门文章

  1. 数据结构实验之二叉树的建立与遍历
  2. Kerberos 基本命令 - 持续更新
  3. txt记录位置 c++,python显示位置
  4. 动态卡片:富媒体内容井喷式增长下,新一代移动端动态研发的模式
  5. 云网管—云上构建网络自动化体系
  6. 多点在线构建Noxmobi全球化精准营销系统
  7. Spark整合Ray思路漫谈
  8. 达摩院里的女Leader,一面温柔似水一面灿烂如阳
  9. 飞天2.0 | 万物智能的基础服务
  10. 2018年9月杭州云栖大会Workshop - 基于日志的安全分析实战