好好学Python:从零基础到项目实战
上QQ阅读APP看书,第一时间看更新

3.3 元组

Python的元组与列表类似,不同之处在于元组的元素不能修改(前面多次提到的字符串也是不能修改的)。创建元组的方法很简单:如果你使用逗号分隔了一些值,就会自动创建元组。

例如,我们做如下输入:

>>> 1, 2, 3
(1, 2, 3)
>>> 'hello', 'world'
('hello', 'world')

上面的操作中使用逗号分隔了一些值,得到的输出结果就是元组。

在实际应用中,元组定义的标准形式是:用一对圆括号括起来,括号中各个值之间通过逗号分隔。

在交互模式下输入:

>>> 5,6,7
(5, 6, 7)
>>> (5,6,7)
(5, 6, 7)
>>> 'hi','python'
('hi', 'python')
>>> ('hi','python')
('hi', 'python')

通过以上这些方式都可以创建元组,不过为了统一规范,建议读者在创建元组时加上圆括号,这样更便于理解。

在Python中,还可以创建空元组,在交互模式下输入:

>>> ()
()

如果圆括号中不包含任何内容,就是一个空元组。

如果要创建包含一个值的元组,实现方式是怎样的呢?在交互模式下尝试如下:

>>> (1)
1

由输出结果可以看到,这不是元组。

在Python中,创建只包含一个值的元组的方式有一些奇特,那就是必须在括号中的元素后加一个逗号或者直接在元素后面加一个逗号,交互模式下输入:

>>> 1,
(1,)
>>> (1,)
(1,)

由输出结果可以看到,逗号的添加是很重要的,只使用圆括号括起来并不能表明所声明的内容是元组。

接下来介绍元组的一些相关操作。

3.3.1 tuple()函数

在Python中,tuple()函数是针对元组操作的,功能是把传入的序列转换为元组并返回得到的元组,若传入的参数序列是元组,就会将传入参数原样返回。

tuple()函数作用在元组上的功能,与list()函数作用在列表上的功能类似,都是以一个序列作为参数。tuple()函数把参数序列转换为元组,list()函数把参数序列转换为列表。在交互模式下输入:

>>> tuple(['hello', 'world'])
('hello', 'world')
>>> tuple('hello')
('h', 'e', 'l', 'l', 'o')
>>> tuple(('hello', 'world'))  #参数是元组
('hello', 'world')

由上面的输出结果可以看到,tuple()函数传入元组参数后,得到的返回值就是传入的参数。

在Python中,可以使用tuple()函数将列表转换为元组,也可以使用list()函数将元组转换为列表,即可以通过tuple()函数和list()函数实现元组和列表的相互转换。在交互模式下输入:

>>> tuple(['hi','python'])           #列表转元组
('hi', 'python')
>>> list(('hi', 'python'))  #元组转列表
['hi', 'python']

由输出结果可以看到,列表和元组是可以相互转换的。

在实际项目应用中,列表和元组的相互转换非常多,属于Python学习中基本必须掌握的技能之一。

3.3.2 元组的基本操作

元组也有一些属于自己的基本操作,如访问元组、元组组合、删除元组、索引和截取等操作。修改元组、删除元组和截取元组等操作和列表中的操作有一些不同。

1.访问元组

元组的访问比较简单,直接通过索引下标即可访问元组中的值,在交互模式下输入:

>>> strnum=('hi','python',2017,2018)
>>> print('strnum[1] is:',strnum[1])
strnum[1] is: python
>>> print('strnum[3] is:',strnum[3])
strnum[3] is: 2018
>>> numbers=(1,2,3,4,5,6)
>>> print('numbers[5] is:',numbers[5])
numbers[5] is: 6
>>> print('numbers[1:3] is:',numbers[1:3])
numbers[1:3] is: (2, 3)

由输出结果可以看到,元组的访问是比较简单的,和列表的访问类似。

访问元组是比较普通的应用,也是元组必备的功能。

2.修改元组

在前面已经明确指出,元组中的元素不允许修改,但是可以对元组进行连接组合,在交互模式下输入:

>>> greeting=('hi','python')
>>> yearnum=(2018,)
>>> print ("合并结果为: ", greeting+yearnum)
合并结果为:  ('hi', 'python', 2018)

由输出结果可以看到,可以对元组进行连接组合操作。

这里读者可能会奇怪元组怎么可以进行组合,其实元组连接组合的实质是生成了一个新的元组,并非是修改了原本的某一个元组。

3.删除元组

在前面已经明确指出,元组中的元素不允许修改,删除也属于修改的一种,也就是说,元组中的元素是不允许删除的,但可以使用del语句删除整个元组,在交互模式下输入:

由以上输出结果可以看到,可以删除元组,元组被删除后,若继续访问元组,程序会报错,报错信息告诉我们greeting没有定义,即前面定义的变量在这个时候已经不存在了。所以元组虽然不可以修改,但是整个元组可以被删除。

4.元组的索引和截取

元组也是一个序列,可以通过索引下标访问元组中指定位置的元素,也可以使用分片的方式得到指定的元素。元组通过分片的方式得到的序列结果也是元组。在交互模式下输入:

>>> field=('hello','world','welcome')
>>> field[2]
'welcome'
>>> field[-2]
'world'
>>> field[1:]
('world', 'welcome')

3.3.3 元组内置函数

在Python中,为元组提供了一些内置函数,如计算元素个数、返回最大值、返回最小值、列表转换等函数。

len(tuple)函数用于计算元组中元素的个数。len(tuple)函数的使用方式如下:

>>> greeting=('hello','world','welcome')
>>> len(greeting)
3
>>> greeting=('hello',)
>>> len(greeting)
1
>>> greeting=()
>>> len(greeting)
0

由以上操作可以看到,元组中计算元素个数的函数和序列是相同的,都是通过len()函数实现的。

max(tuple)函数用于返回元组中元素的最大值,使用方式如下:

由输出结果可以看到,max(tuple)函数既可以应用于数值元组,也可以应用于字符串元组,但是不能应用于数值和字符串混合的元组中。

min(tuple)函数用于返回元组中元素的最小值,使用方式如下:

由输出结果可以看到,min(tuple)函数既可以应用于数值元组,也可以应用于字符串元组,但是同样不能应用于数值和字符串混合的元组中。