你们好,今天为你们介绍一种更为安全的Python内置数据类型:tuple(元组),以及它的基础用法python
元组(tuple)是另外一种有序的数据类型,与list比较相似。主要不一样的一点是tuple被建立后就不能对其进行修改。因此,tuple与list不一样,没有append(),pop(),insert()这些方法可使用。获取元素的方法和list是同样的,能够经过索引来访问(也是从0开始的),只不过不能赋值成为其余的元素。安全
由于 tuple不可变,因此代码更安全。若是能够的话,咱们尽可能使用tuple代替list。app
建立元组
# 定义一个空的tuple t = () print(t) Out:()
只有1个元素的元组在进行定义的时候,须要加一个逗号 , 来消除歧义,不然定义的就不是一个元组而是元素自己spa
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],但不能赋值成另外的元素code
访问元组
访问元组和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']
理解元组的不可变
上面已经说过了,元组是不可变的,让咱们来看下面这个小栗子:blog
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的每个元素自己也不能变。ip
元组的链接
如前面所说,元组是不可改的,可是能够链接,咱们可使用 + 对元组进行链接:
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')
元组的经常使用方法汇总
今天为你们讲解了我知道的有关tuple的一切,也为你们展现了一些常规操做,但愿可以帮助到你们,立刻就要到初五了,迎财神,吃饺子!!! 但愿你们在2019大吉大利,大发横财!!