python编程入门之五:元组

第五章 元组

我们在上一章已经学习使用了列表,可能感觉列表真是一个神奇的东西,可以帮助我们完成很多的工作,列表的方法也是多得多,以为学好了列表,就学好了python,但并非如此;虽然列表很重要,但它也仅仅是python的冰山一角。所以这一章我们来学习 一个被戴上了“枷锁”的列表—元组

5.1 元组的创建和访问

首先要知道为什么元组被称为戴上了“枷锁”的列表——因为元组的性质用法和列表差不多,唯一的几个明显的不同就是1:元组不可以增删改;2:创建元组要用小括号();3: 另外元组的英文名为tuple;在列表的基础上理解这几个不同就很容易了,先看一下是如何进行创建访问的吧,注意它和列表的区别。

tuple1 = (1, 2, 3, "Hopes", "Alex")
print(type(tuple1))  #同样输出一下类型
print(tuple1)  #输出此元组
print(tuple1[3])  #这里要注意,尽管元组的创建使用的小括号,但访问某个元素还是要用中括号
print(tuple1[2:])  # 同样可以用切片

结果:

<class 'tuple'>
(1, 2, 3, 'Hopes', 'Alex')
Hopes
(3, 'Hopes', 'Alex')

结果很明显,元组的创建和访问元素和列表是几乎一样的,那如果我们要尝试一下增删改呢?
我们先用dir方法将元组的内置方法打印一下看看。
(dir方法可以输出其所有内置方法)

print(dir(tuple))

结果:

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',
 '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__',
  '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__',
   '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
    '__subclasshook__', 'count', 'index']

我们看一下tuple的内置方法,是不是根本就没有增删改的方法,涉及到像那种两组下划线形式的“魔法方法”我们以后会讲到,毕竟不是太容易。但我们还是看到了tuple仅有的两种常规方法–count和index,当然,我们在讲列表的时候已经接触过这两种方法了,让我们打印出来再回忆一下。

tuple1 = (1, 3, 1, 5, "Hopes", "Alex")
print(tuple1.index('Hopes'))
print(tuple1.count(1))

结果:

4
2

是不是已经回忆起来了,index是查询某个元素的索引值,count是用来统计某个元素出现的次数。元组的常规方法就这么多,它显然要比列表要简单许多,而且它是不可以更改元素的,所以在某些方面是比较安全的。
那如果我们遇到了特殊情况,确实要修改元素怎么办呢?

5.2 元组的修改和删除

如果有人较真问起来,不是说好了元组不能修改的吗?你在这里又给我讲修改,你是在逗我?嗯~怎么说呢,其实这个“修改”并不是真正意义上的修改,而应该是通过拼接的方式来重新构建一个新元组,是怎么做的呢?看下面的代码。

tupleOld = (1, 2, 3, 5, 6)
tupleNew = tupleOld[:2] + (4,) + tupleOld[2:]
print(tupleNew)
print(tupleOld)

结果:

(1, 2, 4, 3, 5, 6)
(1, 2, 3, 5, 6)

所以这里说的修改其实就是用之前的元组来重新拼接一个新元组,而且还要注意这里我们拼接的时候(4,),这个单独元素后面是需要加一个逗号的,这样才能表明这是一个元组,不然会报错。

那元组的删除是怎么回事呢,这个删除其实并不能删除元组里的特定元素,因为元组的方法本来就没有删除这个BIF,所以我们这里说的删除是删除整个元组,对,你没听错,就是全部删掉,同样很简单,利用我们的del方法。

tuple1 = (1, 3, 1, 5, "Hopes", "Alex")
del(tuple1)
print(tuple1)

结果:

NameError: name 'tuple1' is not defined

报错说我们并没有定义这个“tuple1”,所以我们删除成功了。

5.3 元组和列表的补充用法

我们已经学习了列表和元组的基本用法,但这些还仅仅不够,下面我们再来介绍一些有趣的用法。
(1)多重列表和多重元组
多重的意思也就是,列表里面还包含列表,元组里面还包含元组,或者列表里面包含元组,元组里面包含列表,这些用法都是可行的,而且可以多重包含,下面我们来看一下多重列表和多重元组是怎么创建和调用的。

list1 = [1, 2, 3, [4, 5], 6, 7]
print(list1[3][1])

tuple1 = (1, 3, 5, (7, 9))
print(tuple1[3][0])

结果:

5
7

所以可以看得出,如果要访问列表里的列表或者元组里的元组,只需要用多个中括号来定位就可以了,就像是五月天的一首《洋葱》——“如果你愿意一层一层一层的拨开我的心~”,你会发现自外向内一层一层的扒开就能索引到指定的元素,还是很好理解的也并没有那么麻烦。

(2)判断元素是否在列表或元组内
如果要判断某个元素是否存在于列表元组内,python提供了一个非常人性化的方式:in /not in 方式

list1 = [1, 2, 3, [4, 5], 6, 7]
tuple1 = (1, 3, 5, (7, 9))

print(3 in list1)  # 判断3是否在list内
print(4 in list1[3])  # 注意如果要判断内层的元素,就必须将列表定义到内层
print(4 in list1)  # 没有具体到内层
print(5 in tuple1)
print(9 in tuple1[3])

结果:

True
True
False
True
True

关于列表和元组就先说这些,因为确实没有太多能说的(不是歧视元组简单),但以后的学习中会大量的用到这两个类型,所以一定要多多积累,多多复习(特别是列表,用的非常多)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪博hopes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值