|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 joey234you 于 2017-9-12 03:59 编辑
第13讲 元组:戴上了枷锁的列表
一、引言
早在三百多年前,孟德斯鸠在《论法的精神》里边就提到“一切拥有权力的人都容易滥用权力,这是万古不变的一条经验。”(……^_^……)
由于列表过分强大,Python的作者觉得这样似乎不妥,于是发明了列表的“表亲”——元组。
元组与列表最大的区别就是你可以任意修改列表中的元素,可以任意插入或者删除一个元素,而对元组是不行的,元组是不可改变的(像字符串一样),所以别指望对元组进行原地进行原地排序等高级操作了。
二、创建和访问一个元组
元组和列表,除了不可改变这个显著特征之外,还有一个明显的区别是,创建列表用的是中括号,而创建元组大部分时候用的是小括号,注意这里说的是大部分。
- >>> tuple1 = (1, 2, 3, 4, 5, 6, 7, 8) #元组的创建
- >>> tuple1
- (1, 2, 3, 4, 5, 6, 7, 8)
复制代码
#元组的访问与列表无异,都是通过下标来索引访问
#也可以通过分片的方式来获取部分或复制整个元组
- >>> tuple1[5:]
- (6, 7, 8)
- >>> tuple1[:5]
- (1, 2, 3, 4, 5)
- >>> tuple2 = tuple1[:]
- >>> tuple2
- (1, 2, 3, 4, 5, 6, 7, 8)
复制代码
但是如果试图修改元组中的一个元素,那么很抱歉,元组将会表示很不开心
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
tuple1[1] = 3
TypeError: 'tuple' object does not support item assignment
大部分初学者容易掉坑的问题:如果列表的标志性符号是中括号([]),那么元组的标志性符号会是什么呢?
直接回答——小括号的朋友,将要从坑里爬出来……@_@
下面通过代码块来实验下
- >>> temp = (1) #按掉坑朋友的想法,只要有小括号就是元组
- >>> temp
- 1
- >>> type(temp) #通过type()方法返回参数类型
- <class 'int'> #这回傻眼了吧
- >>> temp2 = 2, 3, 4
- >>> type(temp2)
- <class 'tuple'> #就算没有小括号,temp2照样也是元组
复制代码
#这里逗号(,)才是关键,小括号只是起到补充的作用
- >>> temp = [] #空列表的创建
- >>> type(temp)
- <class 'list'>
- >>> temp = () #空元组的创建
- >>> type(temp)
- <class 'tuple'>
复制代码
#这里要注意的是,当要创建的元组中只有一个元素时,请在它的后边加上一个逗号(,),如此一来,可以让Python明确你想要的是一个元组,而非其它什么鬼
- >>> temp = (1, )
- >>> type(temp)
- <class 'tuple'>
- >>> temp = 1,
- >>> type(temp)
- <class 'tuple'>
复制代码
为了证明逗号(,)起到了决定性作用,再来举个例子
- >>> 8 * (8) #得到一个整数值,因为“*”被看乘号
- 64
- >>> 8 * (8, ) #因为后者是一个元组,所以“*”被当作重复操作符
- (8, 8, 8, 8, 8, 8, 8, 8)
复制代码
三、更新和删除一个元组
既然元组是不可改变的,那么有什么方法来更新和删除元组呢?不知道大家对之前如何更新一个字符串还有没有印象?没错,是通过切片方法拷贝现有的字符串片段构造一个新的字符串的方式来解决
- >>> temp = ('小甲鱼', '黑夜', '迷途', '小布丁')
- #通过分片,将元组拆分成两部分,然后再使用连接操作符(+)合并成一个新的元组,最后将原来的变量名(temp)指向连接好的元组
- >>> temp = temp[:2] + ('怡静', ) + temp[2:]
- >>> temp
- ('小甲鱼', '黑夜', '怡静', '迷途', '小布丁')
复制代码
这里要注意的是,逗号和小括号都是必需的---> ('怡静', )
除了使用上述方法来单独删除元组中的某个元素,还可以使用del语句显式地删除整个元组
- >>> del temp
- >>> temp
- Traceback (most recent call last):
- File "<pyshell#30>", line 1, in <module>
- temp
- NameError: name 'temp' is not defined
复制代码
其实在日常使用中,很少会用del去删除整个元组,因为Python的回收机制会在这个元组不再被使用到手时候自动删除。
四、元组相关的操作符
除了上述使用的拼接操作符和重复操作符可以直接应用在元组上,还有关系操作符(>、<、>=、<=)、逻辑操作符(and、 or、 not)和成员关系操作符(in 、not in)
|
|