列表

“列表(list)由一系列按特定顺序排列的元素组成。你不仅可以创建包含字母表中所有字母、数字 0~9 或所有家庭成员姓名的列表,还可以将任何东西加入列表,其中的元素之间可以没有任何关系。列表通常包含多个元素,因此给列表指定一个表示复数的名称(如 letters、digits 或 names)是个不错的主意。
在 Python 中,用方括号([])表示列表,用逗号分隔其中的元素。下面是一个简单的示例,其中包含几种自行车:

1
2
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

如果让 Python 将列表打印出来,Python 将打印列表的内部表示,包括方括号:

1
['trek', 'cannondale', 'redline', 'specialized']

鉴于这不是你要让用户看到的输出,下面来学习如何访问列表元素。

访问列表元素

列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置(索引)告诉 Python 即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号内。
例如,下面的代码从列表 bicycles 中提取第一款自行车:

1
2
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])

当你请求获取列表元素时,Python 只返回该元素,而不包括方括号:

1
trek

这正是你要让用户看到的结果——整洁、干净的输出。
你还可以对任意列表元素调用第 2 章介绍的字符串方法。例如,可使用 title() 方法让元素 ‘trek’ 的格式更标准:

1
2
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())

这个示例的输出与前一个示例相同,只是首字母 T 是大写的。

索引从 0 而不是 1 开始

在 Python 中,第一个列表元素的索引为 0,而不是 1。大多数编程语言是如此规定的,这与列表操作的底层实现有关
第二个列表元素的索引为 1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减 1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引 3。
下面的代码访问索引 1 和索引 3 处的自行车:

1
2
3
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])

这些代码返回列表中的第二个和第四个元素:

1
2
cannondale
specialized

Python 为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为 -1,可让 Python 返回最后一个列表元素:

1
2
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicyles[-1])

这些代码返回 ‘specialized’。这种语法很有用,因为你经常需要在不知道列表长度的情况下访问最后的元素。
这种约定也适用于其他负数索引,例如,索引 -2 返回倒数第二个列表元素,索引 -3 返回倒数第三个列表元素,依此类推。

使用列表中的各个值

你可以像使用其他变量一样使用列表中的各个值。例如,可以使用 f 字符串根据列表中的值来创建消息。
下面尝试从列表中提取第一款自行车,并使用这个值创建一条消息:

1
2
3
4
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."

print(message)

这里使用 bicycles[0] 的值生成了一个句子,并将其赋给变量 message。输出是一个简单的句子,其中包含列表中的第一款自行车:

1
My first bicycle was a Trek.

修改列表元素

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。
假设有一个摩托车列表,其中的第一个元素为 ‘honda’,那么可在创建列表后修改这个元素的值:

1
2
3
4
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)

首先定义列表 motorcycles,其中的第一个元素为 ‘honda’。接下来,将第一个元素的值改为 ‘ducati’。
输出表明,第一个元素的值变了,但其他列表元素的值没变:

1
2
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

你可以修改任意列表元素的值,而不只是第一个元素的值。

在列表中添加元素

在列表末尾添加元素

在列表中添加新元素时,最简单的方式是将元素追加(append)到列表末尾。继续使用前一个示例中的列表,在其末尾添加新元素 ‘ducati’:

1
2
3
4
5
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append('ducati')
print(motorcycles)

append() 方法将元素 ‘ducati’ 添加到列表末尾,而不影响列表中的其他所有元素:

1
2
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

append() 方法让动态地创建列表易如反掌。例如,你可以先创建一个空列表,再使用一系列函数调用 append() 添加元素。
下面来创建一个空列表,再在其中添加元素 ‘honda’、’yamaha’ 和 ‘suzuki’:

1
2
3
4
5
6
7
8

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)

最终的列表与前述示例中的列表完全相同:

1
['honda', 'yamaha', 'suzuki']

这种创建列表的方式极其常见,因为经常要等程序运行后,你才知道用户要在程序中存储哪些数据。
为了便于管理,可首先创建一个空列表, 用于存储用户将要输入的值,然后将用户提供的每个新值追加到列表末尾。

在列表中插入元素

使用 insert() 方法可在列表的任意位置添加新元素。为此,需要指定新元素的索引和值:

1
2
3
4
motorcycles = ['honda', 'yamaha', 'suzuki']

motorcycles.insert(0, 'ducati')
print(motorcycles)

在这个示例中,值 ‘ducati’ 被插入到了列表开头。insert() 方法在索引 0 处添加空间,并将值 ‘ducati’ 存储到这个地方:

1
['ducati', 'honda', 'yamaha', 'suzuki']

这种操作将列表中的每个既有元素都右移一个位置。

累了,下期再继续—Waiting