Python元组对象tuple入门

班级新来了一个女同学 Joe ,如果要记录她的名字、性别和年龄,可以选用 Python 的哪种数据类型来保存呢?

概述

实际上, Python 提供了一种数据类型 —— 元组 ( tuple ) ,可以很好地保存此类数据。 元组是一种 有序集合,用括号 () 将元素包含在内,各个元素之间以 逗号 隔开。

例如,我们可以这样来存储 Joe 的信息,包括名字、性别和年龄:

1
>>> student = ('Joe', 'female', 20)

下标访问

Python列表对象入门 一节,我们知道了如何通过 下标 访问列表元素。 其实,我们也可以通过下标来访问元组的元素。 例如,Joe 的年龄在元组中的下标是 2,因此,可以这么获取数据:

1
2
>>> student[2]
20

看到这里,有没有发现元组和列表的结构很相似? 两者都是有序集合,并且可以通过下标来访问元素。 那么,元组有什么特别的吗?

不可变

与列表不同,元组是一种不可变的数据类型。 那不可变怎么解读呢? 我们先尝试改变 Joe 的年龄,看看会发生什么?

1
2
3
4
>>> student[2] = 21
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

程序报错了!很明显,我们并没有成功改变 Joe 的年龄:

1
2
>>> student[2]
20

通过以上的例子,我们可以知道,不可变指的是不可改变元组内的元素。 也就是说,元组内的元素在一开始创建后,便不可改变。

遍历

元组与列表一样,也是可迭代对象。因此可以用 for 语句对元组进行遍历:

1
2
3
4
5
6
>>> for item in student:
...     print(item)
...
Joe
female
20

我们通过遍历,将元组内的元素依次打印到屏幕上。

删除

元组内元素不可变,自然也是不可删除。 但是,我们可以使用 del 关键字,来删除整个元组。

1
2
3
4
5
>>> del student
>>> student
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
NameError: name 'student' is not defined

这里,我们已经成功删除了 student 这个元组。 因此,访问时会报未定义的错误。

单元素元组

如果我们要创建的元组只有一个元素,那该怎么做呢? 你们也许会想,这不是很简单吗?直接敲了下面这行代码:

1
>>> a = (50)

等等,真的是这样吗? 我们来看看创建的 a 到底是不是元组类型:

1
2
>>> type(a)
<class 'int'>

很显然,aint 类型,并不是一个 tuple

实际上,这里的 () 被当做普通括号来用,影响运算符的优先级。 a = (50) 等价于 a = 50

那该如何创建只有一个元素的元组呢?我们只需在元素后面加个逗号即可,以区分 () 的作用:

1
2
3
>>> b = (50,)
>>> type(b)
<class 'tuple'>

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: