数据结构:元组
大家好,咱们继续讲Python四大数据结构,今天的主题是:元组。
1、元组(tuple)
元组(tuple)和列表(list)很相似,但是,列表允许并且提供了方法来改变它的值,而元组是不可改变的,即不允许你改变它的值,这应该也是它没有方法的部分原因。所以,有人把它称作“带了紧箍咒的列表”。
所以,请记住:
(1)、元组中包含的对象是不可更改的,注意不是元组不可更改。
(2)、元组因为更新或删除,其长度因此发生变化。
(3)、元组的主要作用是作为参数传递给函数调用、或是从函数调用那里获得参数时,保护其内容不被外部接口修改。
(4)、元组在前台用的不多,但是在后台却使用得相当频繁。
2、创建一个元组
将用逗号分隔的对象置于一对圆号之中,就创建了一个元组。
PS:虽然,元组通常存在于圆括号中,但形式上仅有圆括号是不够的,是否有逗号,才能决定它是不是一个元组。
说明:我们特地使用了前面列表示例的所有对象,来创建一个元组,它们看起来除了括号不同,是不是长得很相像?请注意,如何定义一个空的元组和只有一个单项的元组。看看最后定义的tuple6真的是一个元组吗?
3、访问元组中的值
说明:
1、显示:交互模式下的代码可以省略print()。
2、索引:使用下标访问元组中对象的值。
3、负索引:使用负数下标实现倒序索引。
4、通过-1索引:获取最后一项的值。
5、切片:使用冒号分节符进行切片操作。
6、特殊切片:获取一个完整的倒序元组。
4、更新元组
我们可以使用重新赋值、append()方法对元组进行修改或更新。
说明:
1、利用切片实现插值;
2、使用append()方法向列表的末尾追加新的项。
3、元组无法通过索引,直接为指定下标的项重新赋值,也不能使用del语句,通过索引删除指定下标的项。
5、元组的操作符
元组对 + 和 * 的操作符与列表相似。+ 号用于合并,* 号用于重复。
6、元组和列表的相互转换
元组与列表的转换操作,让它可以方便地将列表转换为元组,再利用元组的“惰性”,将它作为参数传递给函数调用、或是从函数调用那里获得参数时,保护其内容不被外部接口修改。
7、zip()与zip(*)
说明:
(1)、zip()会将两个以上的序列,打包到一个zip对象(由元组构成的新的序列)之中。
(2)、这个新的序列可以通过迭代遍历,也可以直接转换为一个列表或元组。
(3)、但无论哪种方式,只能读取一次,再读返回空值。
(4)、zip()操作,实际上适用于支持迭代操作的所有序列,甚至包括字符串。
说明:
(1)、zip(*)会将一个二维的序列,解包成两个以上的序列,并生成为一个zip对象。
(2)、解包这个对象,会发现它其实就是打包之前的多个序列,所以,zip()和zip(*)可以成为互逆的操作。
(3)、zip(*)也只支持一次性读取。再读返回空值。
(4)、zip()和zip(*)的操作在形式上实现了多个序列的行列互换。记住这个特性,我们在一些特定场合用得上。
7、函数利用* ,实现任意参数的传递
函数可以利用通配符*,实现任意数量的参数传递。
说明:此处,x的值为何被显示为元组,因为函数的参数本身就是位于圆括号中,且由逗号分隔的对象,在Python中,它当然就是元组了,它也体现了Python语法在内容和形式上的统一。
小结
这节课,我们学习了Python的数据结构:元组。详细了解了它的创建和使用方法,以及元组与列表的差异,及其相互转换。
预告
下节课,我们将继续介绍Python数据结构之三:字典,它也是Python四大常用数据结构之一。我们会发现,虽然它也是一种序列类型的数据结构,但是,它却具有为完全不同的内部组织形式,从而,让Python能为不同的应用场景或需求,提供技术支持。
您有任何疑问和建议,请留言。