全面深入介绍Python中的元组
2020-02-11
作者:Michael Galarnyk
翻译:老齐
译者注: 本文适合初学者阅读。推荐与本文内容有关的数据:《Python大学实用教程》、《跟老齐学Python:轻松入门》(均为电子工业出版社出版)
元组是序列,就像列表一样。元组和列表的主要区别在于元组中的不能更改(即元组不可变),而列表可以更改(可变)。
创建元组
创建空元组有两种方法,可以通过使用不包含任何值的()来创建一个空元组。
1 | # 方法1 |
还可以使用tuple函数创建一个空元组。
1 | # 方法2 |
带有元素的元组可以通过用逗号分隔的序列来创建。
1 | # 方法1 |
请务必记住,如果要创建只包含一个值的元组,则需要在元素的后面使用逗号。
1 | # 只有一个值的元组 |
访问元组中的值
元组中的每个值都有一个指定的索引值。需要注意的是,Python是一种基于零索引的语言,这意味着元组中的第一个值的索引是0。
1 | # 创建一个元组 |
Python还支持负索引。负索引从元组的末尾开始,有时使用负索引来获取元组中的最后一项会更方便,因为你不必知道元组的长度就可以访问最后一项。
1 | # 打印元组的最后一项 |
提示一下,你还可以使用正索引访问相同的项(如下所示)。
元组切片
切片操作返回包含请求项的新元组,从而得到元组中元素的子集。对于下面的示例代码,它将返回一个元组,其中包含从索引0到索引2(不包括索引2)的项。
1 | # 创建元组 |
1 | # 从第一个开始,但不包含索引3项 |
你甚至可以制作索引为负的切片。
1 | print(z[-4:-1]) |
元组是不可变的
元组是不可变的,这意味着在创建元组之后,无法更新元组中的某个元素。正如下面的代码所示,你不能更新或更改元组项的值(这不同于Python列表,因为Python列表是可变的)。
1 | z = (3, 7, 4, 2) |
即使元组是不可变的,也可以采用现有元组的一部分来创建新元组,如下面的示例所示。
1 | # 创建元组 |
元组的方法
在开始本节之前,先创建一个元组。
1 | # 创建元组 |
index方法
index
方法返回在元组中查询到的第一个值的索引。
1 | print(animals.index('lama')) |
count方法
count
方法返回一个值在元组中出现的次数。
1 | print(animals.count('lama')) |
遍历元组
可以使用for循环遍历元组的项。
1 | for item in ('lama', 'sheep', 'lama', 48): |
元组解包
元组对于序列解包很有用。
1 | x, y = (7, 10); |
枚举
枚举函数返回一个元组,该元组包含每次迭代的计数(从开始时默认为0)和在序列上迭代获得的值:
1 | friends = ('Steve', 'Rachel', 'Michael', 'Monica') |
元组相对于列表的优点
下面的视频内容很详细地介绍了元组和列表的区别,请观看:
(视频课程)
列表和元组是按序列存储值的内置Python数据类型。元组是不可变的,而列表是可变的。与列表相比,元组还有其他一些优点(部分来自堆栈溢出)
- 元组比列表快。如果要定义一个恒定的数值集合,并且你所要做的只是遍历它,请使用元组而不是列表。使用
timeit
可以测量性能差异,该模块允许你对Python代码计时。下面的代码为每种方法执行100万次,并输出以秒为单位的总时间。
1 | import timeit |
- 元组可以用作字典键(特别是包含不可变值的元组,如字符串、数字和其他元组)。列表永远不能用作字典键,因为列表是可变的。
- 元组可以用作集合中的值,而列表不能。
关注微信公众号:老齐教室。读深度文章,得精湛技艺,享绚丽人生。
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
关注微信公众号,读文章、听课程,提升技能