QQ登录

只需一步,快速开始

搜索
鱼C论坛笔记大赛成绩公示
查看: 52|回复: 0

[学习笔记] 《零基础入门学习Python》第13讲笔记

[复制链接]
累计签到:75 天
连续签到:1 天
最佳答案
0 
发表于 2017-9-12 03:59:33 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 joey234you 于 2017-9-12 03:59 编辑

第13讲 元组:戴上了枷锁的列表

一、引言
        早在三百多年前,孟德斯鸠在《论法的精神》里边就提到“一切拥有权力的人都容易滥用权力,这是万古不变的一条经验。”(……^_^……)

由于列表过分强大,Python的作者觉得这样似乎不妥,于是发明了列表的“表亲”——元组。

      元组与列表最大的区别就是你可以任意修改列表中的元素,可以任意插入或者删除一个元素,而对元组是不行的,元组是不可改变的(像字符串一样),所以别指望对元组进行原地进行原地排序等高级操作了。

二、创建和访问一个元组
       
        元组和列表,除了不可改变这个显著特征之外,还有一个明显的区别是,创建列表用的是中括号,而创建元组大部分时候用的是小括号,注意这里说的是大部分
  1. >>> tuple1 = (1, 2, 3, 4, 5, 6, 7, 8) #元组的创建
  2. >>> tuple1
  3. (1, 2, 3, 4, 5, 6, 7, 8)
复制代码

#元组的访问与列表无异,都是通过下标来索引访问
  1. >>> tuple1[1]
  2. 2
复制代码

#也可以通过分片的方式来获取部分或复制整个元组
  1. >>> tuple1[5:]
  2. (6, 7, 8)
  3. >>> tuple1[:5]
  4. (1, 2, 3, 4, 5)
  5. >>> tuple2 = tuple1[:]
  6. >>> tuple2
  7. (1, 2, 3, 4, 5, 6, 7, 8)
复制代码


但是如果试图修改元组中的一个元素,那么很抱歉,元组将会表示很不开心
  1. >>> tuple1[1] = 3
复制代码

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    tuple1[1] = 3
TypeError: 'tuple' object does not support item assignment


大部分初学者容易掉坑的问题:如果列表的标志性符号是中括号([]),那么元组的标志性符号会是什么呢?
直接回答——小括号的朋友,将要从坑里爬出来……@_@

下面通过代码块来实验下


  1. >>> temp = (1) #按掉坑朋友的想法,只要有小括号就是元组
  2. >>> temp
  3. 1
  4. >>> type(temp)  #通过type()方法返回参数类型
  5. <class 'int'>  #这回傻眼了吧
  6. >>> temp2 = 2, 3, 4
  7. >>> type(temp2)
  8. <class 'tuple'>  #就算没有小括号,temp2照样也是元组
复制代码

#这里逗号(,)才是关键,小括号只是起到补充的作用
  1. >>> temp = [] #空列表的创建
  2. >>> type(temp)
  3. <class 'list'>
  4. >>> temp = () #空元组的创建
  5. >>> type(temp)
  6. <class 'tuple'>
复制代码

#这里要注意的是,当要创建的元组中只有一个元素时,请在它的后边加上一个逗号(,),如此一来,可以让Python明确你想要的是一个元组,而非其它什么鬼
  1. >>> temp = (1, )
  2. >>> type(temp)
  3. <class 'tuple'>
  4. >>> temp = 1,
  5. >>> type(temp)
  6. <class 'tuple'>
复制代码


为了证明逗号(,)起到了决定性作用,再来举个例子

  1. >>> 8 * (8) #得到一个整数值,因为“*”被看乘号
  2. 64
  3. >>> 8 * (8, )  #因为后者是一个元组,所以“*”被当作重复操作符
  4. (8, 8, 8, 8, 8, 8, 8, 8)
复制代码


三、更新和删除一个元组
既然元组是不可改变的,那么有什么方法来更新和删除元组呢?不知道大家对之前如何更新一个字符串还有没有印象?没错,是通过切片方法拷贝现有的字符串片段构造一个新的字符串的方式来解决

  1. >>> temp = ('小甲鱼', '黑夜', '迷途', '小布丁')
  2. #通过分片,将元组拆分成两部分,然后再使用连接操作符(+)合并成一个新的元组,最后将原来的变量名(temp)指向连接好的元组
  3. >>> temp = temp[:2] + ('怡静', ) + temp[2:]
  4. >>> temp
  5. ('小甲鱼', '黑夜', '怡静', '迷途', '小布丁')
复制代码


这里要注意的是,逗号和小括号都是必需的---> ('怡静', )

除了使用上述方法来单独删除元组中的某个元素,还可以使用del语句显式地删除整个元组
  1. >>> del temp
  2. >>> temp
  3. Traceback (most recent call last):
  4.   File "<pyshell#30>", line 1, in <module>
  5.     temp
  6. NameError: name 'temp' is not defined
复制代码


其实在日常使用中,很少会用del去删除整个元组,因为Python的回收机制会在这个元组不再被使用到手时候自动删除。

四、元组相关的操作符
除了上述使用的拼接操作符和重复操作符可以直接应用在元组上,还有关系操作符(>、<、>=、<=)、逻辑操作符(and、 or、 not)和成员关系操作符(in 、not in)


本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-9-24 02:13 Powered by Discuz! X2.5 Theme by dreambred

快速回复 返回顶部 返回列表