>>> from env_helper import info; info()
页面更新时间: 2020-02-27 18:54:46
操作系统/OS: Linux-4.19.0-8-amd64-x86_64-with-debian-10.3 ;Python: 3.7.3

4.1. 列表

列表(List)是最基本的Python数据结构,它是通过对数据元素进行编号将它们组织在一起的数据元素的集合。

列表可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定列表的长度以及确定最大和最小的元素的方法。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

>>> list1 = ['physics', 'chemistry', 1997, 2000]
>>> list2 = [1, 2, 3, 4, 5 ]
>>> list3 = ["a", "b", "c", "d"]

4.1.1. 列表数据类型

“列表”是一个值,它包含多个字构成的序列。 术语“列表值”指的是列表本身(它作为一个值, 可以保存在变量中,或传递给函数,像所有其他值一样), 而不是指列表值之内的那些值。列表值看起来像这样: [ '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.2. 用下标取得列表中的单个值

假定列表 [ 'cat' , 'bat', 'rat', 'elephant'] 保存在名为 spam 的变量中。 Python 代码 spam[0] 将求值为 'cat'spam[l] 将求值为 'bat' , 依此类推。列表后面方括号内的整数被称为“下标”。 列表中第一个值的下标是 0 ,第二个值的下标是1,第三个值的下标是2, 依此类推。

例如,在交互式环境中输入以下表达式。 开始将列表赋给变量 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]

IndexError: list index out of range

下标只能是整数,不能是浮点值。下面的例子将导致 TypeError 错误:

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

TypeError: list indices must be integers or slices, 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

4.1.3. 负数下标

虽然下标从 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.4. 利用切片取得子列表

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

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

  • spam[l: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']