返回介绍

4.1 列表数据类型

发布于 2024-01-22 21:44:07 字数 5180 浏览 0 评论 0 收藏 0

“列表”是一个值,它包含多个字构成的序列。术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那些值。列表值看起来像这样:['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变量❶仍然只被赋予一个值:列表值。但列表值本身包含多个值。[]是一个空列表,不包含任何值,类似于空字符串’’。

4.1.1 用下标取得列表中的单个值

假定列表['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',即第一个列表中的第二个值。如果只使用一个下标,程序将打印出该下标处的完整列表值。

4.1.2 负数下标

虽然下标从0开始并向上增长,但也可以用负整数作为下标。整数值−1指的是列表中的最后一个下标,−2指的是列表中倒数第二个下标,以此类推。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[-1]
'elephant'
>>> spam[-3]
'bat'
>>> 'The ' + spam[-1] + ' is afraid of the ' + spam[-3] + '.'
'The elephant is afraid of the bat.'

4.1.3 利用切片取得子列表

就像下标可以从列表中取得单个值一样,“切片”可以从列表中取得多个值,结果是一个新列表。切片输入在一对方括号中,像下标一样,但它有两个冒号分隔的整数。请注意下标和切片的不同。

· spam[2]是一个列表和下标(一个整数)。

· spam[1:4]是一个列表和切片(两个整数)。

在一个切片中,第一个整数是切片开始处的下标。第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。切片求值为一个新的列表值。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0:4]
['cat', 'bat', 'rat', 'elephant']
>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']

作为快捷方法,你可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标相当于使用0,或列表的开始。省略第二个下标相当于使用列表的长度,意味着分片直至列表的末尾。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[:2]
['cat', 'bat']
>>> spam[1:]
['bat', 'rat', 'elephant']
>>> spam[:]
['cat', 'bat', 'rat', 'elephant']

4.1.4 用len()取得列表的长度

len()函数将返回传递给它的列表中值的个数,就像它能计算字符串中字符的个数一样。在交互式环境中输入以下代码:

>>> spam = ['cat', 'dog', 'moose']
>>> len(spam)
3

4.1.5 用下标改变列表中的值

一般情况下,赋值语句左边是一个变量名,就像spam = 4。但是,也可以使用列表的下标来改变下标处的值。例如,spam[1] = 'aardvark'意味着“将列表spam下标1处的值赋值为字符串'aardvark'。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[1] = 'aardvark'
>>> spam
['cat', 'aardvark', 'rat', 'elephant']
>>> spam[2] = spam[1]
>>> spam
['cat', 'aardvark', 'aardvark', 'elephant']
>>> spam[-1] = 12345
>>> spam
['cat', 'aardvark', 'aardvark', 12345]

4.1.6 列表连接和列表复制

+操作符可以连接两个列表,得到一个新列表,就像它将两个字符串合并成一个新字符串一样。*操作符可以用于一个列表和一个整数,实现列表的复制。在交互式环境中输入以下代码:

>>> [1, 2, 3] + ['A', 'B', 'C']
[1, 2,  3,  'A',  'B',  'C']
>>> ['X', 'Y', 'Z'] * 3
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']
>>> spam = [1, 2, 3]
>>> spam = spam + ['A', 'B', 'C']
>>> spam
[1, 2, 3, 'A', 'B', 'C']

4.1.7 用del语句从列表中删除值

del语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标。例如,在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> del spam[2]
>>> spam
['cat', 'bat', 'elephant']
>>> del spam[2]
>>> spam
['cat', 'bat']

del语句也可用于一个简单变量,删除它,作用就像是“取消赋值”语句。如果在删除之后试图使用该变量,就会遇到NameError错误,因为该变量已不再存在。

在实践中,你几乎永远不需要删除简单变量。del语句几乎总是用于删除列表中的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文