python里面的元组

2 篇文章 0 订阅
1 篇文章 0 订阅



pyhton 里面的元组,其实本质还是列表,但是它有和列表不同,元组是被戴上了枷锁的列表。

元组和列表不同,主要在于元组里面的元素是不可改变的,而列表是可任意地插入、删除元素的。下面我们可以分别dir()方法下:

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
相信大家看了后应该对列表和元组的区别有更加深刻的了解。

下面继续向大家介绍元组

首先,我们先来创建一个元组:

元组的创建和列表的创建不一样,列表的建立一定要用中括号[ ];而元组的创建可以有小括号,也可以没有,其创建的最重要的一点是要有逗号(,)。这点很重要,下面让我们来看看。

tuple1 = (1,4,5,2,7,9,8)
<pre name="code" class="python">tuple2 =  1,4,5,2,7,9,8
 tuple1和tuple2都是合法的。但是呢?这里似乎看不出元组的最重要的特点是逗号啊,我们再来示范下,建立tuple3和tuple4: 

tuple3 = (3)
tuple4 = (3,)
打印tuple3和tuple4

>>> print(tuple3)
3
>>> print(tuple4)
(3,)
注意到区别了没有,打印的tuple3显示的结果是3,是整值,没有括号;而打印的tuple4显示的结果是(3,)是有括号的。

如果这点缺乏说服力,可以调用type()方法

>>> type(tuple3)
<class 'int'>
>>> type(tuple4)
<class 'tuple'>
这里显示的是tuple3的类型是“int”,而tuple4的类型是“tuple”。

所以说,逗号是建立元组的最大特点。而列表的创建的最大特点是中括号 [ ]。当然,有小伙伴可能会说,那我要是创建一个空元组,那么根据列表的创建空列表的方法,可以这样创建啊

>>> tuple5 = ,
这种想法是错误的。python编译器会给出这样的错误:

SyntaxError: invalid syntax

创建完了元组,现在再来看看怎么访问元组的元素。

元组元素的访问是和列表的元素访问是一样的。

下面来访问tuple1中的元素

>>> tuple1[2]
5
看,是不是和列表的元素访问有相同的效果。

同时,列表中分片的方法同样也适合元组

由于在前面的文章中已经提到过分片,这里我就不在详细介绍分片,直接上代码吧。

>>> tuple1[1:4]
(4, 5, 2)
>>> tuple1[:4]
(1, 4, 5, 2)
>>> tuple1[1:]
(4, 5, 2, 7, 9, 8)
>>> tuple1[:]
(1, 4, 5, 2, 7, 9, 8)

好,下面让我们继续学习元组。

如果有下面的一组代码,大家想想打印的结果是什么?

<pre name="code" class="python">>>>3*(3)      #这里也可以 >>> 3*tuple3   结果是一样的  
 嗯,结果是9。但是,要是这样呢? 

>>>3*(3,)      #这里也可以 >>> 3*tuple4   结果是一样的
打印的结果是:
(3, 3, 3)
嗯,没错。相信小伙伴们已经猜对了,第一个相当于整数的乘法,第二个得到的3个3的元组,这里乘号是重复符号


下面继续介绍元组的更新和删除。说这点之前,想问问大家一个问题:

tuple1[1] = 9
大家觉得这里会成功替换原元组的tuple[1]的元素4吗?来验证下:

>>> tuple1[1]=9
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    tuple1[1]=9
TypeError: 'tuple' object does not support item assignment
是的,程序在这里会报错,因为在开始的时候已经说了,元组创建后,ta的值就确定了,也就是说不能改变。

这里说的更新和上述的方法不一样的。元组的更新是用分片方式,上代码:

>>> tuple9 = ("桌子","椅子","书桌","饭桌 ")
创建好后,往元组中,往椅子后面增加一个元素“python”
>>> tuple9 = tuple9[:2]+("python",)+tuple9[2:]    #注意:<span style="color:#ff0000;">这里的括号和逗号都是必须的</span>,否则编译器将会报错
>>> tuple9
('桌子', '椅子', 'python', '书桌', '饭桌 ')
现在已经成功把“python”这个元素加入到元组中了。这里需要大家注意的是, ("桌子","椅子","书桌","饭桌 ")元组是还存在的,只是tuple9这个标签已经不指向ta,而指向了('桌子', '椅子', 'python', '书桌', '饭桌 ')这个新的元组。但是,python里面有一个回收器,如果python的回收器观察到("桌子","椅子","书桌","饭桌 ")没有标签,就会将ta回收。
说完了元组的更新,再来说说元组的删除,注意,列表的3个删除的方法(大家还记得吗?不记得可以看看前面的文章)并不适用于元组。但元组怎么删除元素呢?我们还是利用分片的方法。

还是拿tuple9来说,删除该元组中的“书桌”,可以这样,

>>> tuple9
('桌子', '椅子', 'python', '书桌', '饭桌 ')
>>> tuple9 = tuple9[:3]+tuple9[4:]
>>> tuple9
('桌子', '椅子', 'python', '饭桌 ')
>>> 
现在已经成功删除了。大家可以写写代码试试看。

当然,也可以del的方法(这个方法是删除整个元组的),不过不推荐大家使用(因为python里面有个回收机制,这点和Java差不多),不过还是可以给大家示范下:

>>> del tuple9
>>> tuple9
删除后打印,这里编译器会报错(因为整个元组已经被删除了,也就没有了元组tuple9了)
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    tuple9
NameError: name 'tuple9' is not defined
>>> 

在这里,跟大家说下:关系操作符 innot in也可以用在元组中,逻辑操作符 andor同样可以。

好啦,今天的内容就讲到这啦。有不足之处还请大家多多请教。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值