python编程入门之五:元组

第五章 元组的使用

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

5.1 元组的创建和访问

首先先让大家知道为什么元组被称为被戴上枷锁的列表,因为元组的性质和用法和列表差不多,唯一的两个不同就是1,元组不可以增删改;2,创建元组要用小括号()。元组的英文名为tuple,先看一下是如何进行创建和访问的吧,注意她和列表的区别。

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

结果:

(1, 2, 3, ‘Hopes‘, ‘Alex‘)
Hopes
(3, ‘Hopes‘, ‘Alex‘)

结果很明显,元组的创建和访问元素和列表是几乎一样的,那如果我们要尝试一下增删改呢?
我们先用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

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

5.2 元组的修改和删除

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

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

关于列表和元组就先说这些,以后的学习中会大量的用到这两个类型,所以一定要多多积累,多多复习。