在你能够开始编写程序之前,还有一个主题需要理解,那就是列表数据类型及元组。列表和元组可以包含多个值,这样编写程序来处理大量数据就变得更容易。而且,由于列表本身又可以包含其他列表,所以可以用它们将数据安排成层次结构。
本章将探讨列表的基础知识。我也会讲授关于方法的内容。方法也是函数,它们与特定数据类型的值绑定。然后我会简单介绍类似列表的元组和字符串数据类型,以及它们与列表值的比较。下一章将介绍字典数据类型。
“列表”是一个值,它包含多个字构成的序列。术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那些值。列表值看起来像这样:['cat', 'bat', 'rat', 'elephant']。就
像字符串值用引号来标记字符串的起止一样,列表用左方括号开始,右方括号结束,即[]。列表中的值也称为“表项”。表项用逗号分隔(就是说,它们是“逗号分隔的”)。例如,在交互式环境中输入以下代码:
>>> [1, 2, 3]
[1, 2, 3]
>>> ['cat', 'bat', 'rat', 'elephant']
['cat', 'bat', 'rat', 'elephant']
>>> ['hello', 3.1415, True, None, 42]
['hello', 3.1415, True, None, 42]
➊ >>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam
['cat', 'bat', 'rat', 'elephant']
spam 变量➊仍然只被赋予一个值:列表值。但列表值本身包含多个值。[]是一个空列表,不包含任何值,类似于空字符串’’。
用下标取得列表中的单个值
假定列表['cat', 'bat', 'rat', 'elephant']保存在名为 spam 的变量中。Python 代码
spam[0]将求值为'cat',spam[1]将求值为'bat',依此类推。列表后面方括号内的整数被称为“下标”。列表中第一个值的下标是 0,第二个值的下标是 1,第三个值的下标是
2,依此类推。图 4-1 展示了一个赋给 spam 的列表值,以及下标表达式的求值结果。
图 4-1 一个列表值保存在 spam 变量中,展示了每个下标指向哪个值
例如,在交互式环境中输入以下表达式。开始将列表赋给变量 spam。
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0]
'cat'
>>> spam[1]
'bat'
>>> spam[2]
'rat'
>>> spam[3]
'elephant'
>>> ['cat', 'bat', 'rat', 'elephant'][3]
'elephant'
➊ >>> 'Hello ' + spam[0]
➋ 'Hello cat'
>>> 'The ' + spam[1] + ' ate the ' + spam[0] + '.'
'The bat ate the cat.'
请注意,表达式'Hello ' + spam[0] ➊求值为'Hello ' + 'cat',因为
spam[0]求值为字符串'cat'。这个表达式也因此求值为字符串'Hello cat'➋。
如果使用的下标超出了列表中值的个数,Python 将给出 IndexError 出错信息。
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[10000]
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module> spam[10000]
IndexError: list index out of range
下标只能是整数,不能是浮点值。下面的例子将导致 TypeError 错误:
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[1]
'bat'
>>> spam[1.0]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module> spam[1.0]
TypeError: list indices must be integers, not float
>>> spam[int(1.0)]
'bat'
列表也可以包含其他列表值。这些列表的列表中的值,可以通过多重下标来访问,像这样:
>>> spam = [['cat', 'bat'], [10, 20, 30, 40, 50]]
>>> spam[0]
['cat', 'bat']
>>> spam[0][1]
'bat'
>>> spam[1][4]
50
第一个下标表明使用哪个列表值,第二个下标表明该列表值中的值。例如, spam[0][1]打印出'bat',即第一个列表中的第二个值。如果只使用一个下标,程序将打印出该下标处的完整列表值。