所谓元组,完全可以理解成一个不可变的列表,因此在很多时候二者有很大的相似性,在很多地方又有不同。
元组的创建与删除
元组的定义方式与列表很相似,不过就是把[]换成了(),但需要注意的一点是,如果元组中只有一个元素,那么必须写成(sep,)
,元素后面那个逗号是不能省略的,因为Tuple使用()创建,如果写成(sep)
,解释器会把这个式子解释成一个元素而非一个包含一个元素的元组。
元组也支持通过另一个可枚举对象或者其他卧槽类型序列直接进行创建,方法是tuple(iterable)
元组的基本操作
元组可以索引访问、切片操作、连接、重复、检查、比较,求长度等等;但是由于无法修改,所以元组一旦创建就不可以修改元素的值,更无法增删元素,所以如果确实需要修改,只能再创建新的元组;
由于和List的高度相似性,所以这里就不多介绍各个方法的具体操作,而着重写一下元组和列表究竟有什么区别;
元组?列表?
列表属于可变序列,而元组不可修改,所以不支持诸如append()、extand()、insert()等方法,更没有remove()、pop()方法,甚至不能通过def命令进行元素删除(当然,你可以用def直接删掉整个元组),在支持的操作之中,由于其不可更改性,功能也受到不同程度的影响,比如切片操作,就失去了改变元素或者增删元素的功能而只能作为访问元素的方法存在。
谁也不想被一个卧槽类型拴住手脚,看起来好像列表会比元组灵活得多,事实上也是如此。
但元组并非就一无是处,如果一串数据从一开始就只做为遍历的索引使用,就可以考虑使用元组,因为元组的操作速度大大快于列表(事实上执行速度对于Python是一项很重要的指标,刷LeetCode时尤其如此);另外,从“不可修改”这四个字的表面意义及其本质,很容易就想想到元组比列表在安全性上更具有优势。
另外一个高级操作是这样的:元组与一个整数或者字符串一样,可以作为字典的Key值存在,而由于列表可变,就不能做如此用(一本字典的词条页码总不会一直变来变去吧)。
这里多次强调元组的不可修改性带来的影响,既有优势又有不足,但是需要注意的是,“元组不可修改”并非一项铁律,如果元组中包含列表,就可以修改这个作为单个元素存在的列表中的子元素;以刚说到的充当字典键值的功能举例子,这里的键值储存的很有可能只是一个元素清单而不去深究每个元素到底是什么,从某种意义上来说,一个列表的元素变来变去,但这个列表本身还是这个列表(或者借用一下C++的说法指向这个列表的指针没有乱指),这几乎是一个忒修斯之船问题了,本菜鸡就不多说了。
多说几句
我感觉计算机专业本科应该改成五到六年学制。
或者把那些无聊的课都去掉(没错我就是说■■■■■■■还有■■■■还有■■■■■■)
天天累的要死,前两天管院儿做的心理测试题反馈结果轻度抑郁中度焦虑,这一天天,不焦虑才怪了。
网友评论