。接下来,我们从这个列表中弹出一个值,并将其存储到变量 popped_motorcycle 中(见?)。然后我们打印这个列
表,以核实从其中删除了一个值(见?)。最后,我们打印弹出的值,以证明我们依然能够访问被删除的值(见?)。
输出表明,列表末尾的值 'suzuki' 已删除,它现在存储在变量 popped_motorcycle 中:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
方法 pop() 是怎么起作用的呢?假设列表中的摩托车是按购买时间存储的,就可使用方法 pop() 打印一条消息,指出最后购买的是哪款摩托车:
motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print("The last motorcycle I owned was a " + last_owned.title() + ".")
输出是一个简单的句子,指出了最新购买的是哪款摩托车:
The last motorcycle I owned was a Suzuki.
3. 弹出列表中任何位置处的元素
实际上,你可以使用 pop() 来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。
motorcycles = ['honda', 'yamaha', 'suzuki']
? first_owned = motorcycles.pop(0)
? print('The first motorcycle I owned was a ' + first_owned.title() + '.')
首先,我们弹出了列表中的第一款摩托车(见?),然后打印了一条有关这辆摩托车的消息(见?)。输出是一个简单的句子,描述了我购买的第一辆摩托车:
The first motorcycle I owned was a Honda.
别忘了,每当你使用 pop() 时,被弹出的元素就不再在列表中了。
如果你不确定该使用 del 语句还是 pop() 方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用 del 语句;如果你要在删除元
素后还能继续使用它,就使用方法 pop() 。
4. 根据值删除元素
有时候,你不知道要从列表中删除的值所处的位置。如果你只知道要删除的元素的值,可使用方法 remove() 。
例如,假设我们要从列表 motorcycles 中删除值 'ducati' 。
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
? motorcycles.remove('ducati')
print(motorcycles)
? 处的代码让 Python 确定 'ducati' 出现在列表的什么地方,并将该元素删除:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
使用 remove() 从列表中删除元素时,也可接着使用它的值。下面删除值 'ducati' ,并打印一条消息,指出要将其从列表中删除的原因:
? motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
? too_expensive = 'ducati'
? motorcycles.remove(too_expensive)
print(motorcycles)
? print(" A " + too_expensive.title() + " is too expensive for me.")
在?处定义列表后,我们将值 'ducati' 存储在变量 too_expensive 中(见?)。接下来,我们使用这个变量来告诉 Python 将哪个值从列表中删除(见?)。最后,
值 'ducati' 已经从列表中删除,但它还存储在变量 too_expensive 中(见?),让我们能够打印一条消息,指出将 'ducati' 从列表 motorcycles 中删除的原因:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
>
注意 方法 remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。你将在第 7 章学习如何这
样做。
动手试一试
下面的练习比第 2 章的练习要复杂些,但让你有机会以前面介绍过的各种方式使用列表。
3-4 嘉宾名单 :如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请哪些人?请创建一个列表,其中包含至少 3 个你想邀请的人;然后,使用
这个列表打印消息,邀请这些人来与你共进晚餐。
3-5 修改嘉宾名单 :你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾。
以完成练习 3-4 时编写的程序为基础,在程序末尾添加一条 print 语句,指出哪位嘉宾无法赴约。
修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名。
再次打印一系列消息,向名单中的每位嘉宾发出邀请。
3-6 添加嘉宾 :你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾。
以完成练习 3-4 或练习 3-5 时编写的程序为基础,在程序末尾添加一条 print 语句,指出你找到了一个更大的餐桌。
使用 insert() 将一位新嘉宾添加到名单开头。
使用 insert() 将另一位新嘉宾添加到名单中间。
使用 append() 将最后一位新嘉宾添加到名单末尾。
打印一系列消息,向名单中的每位嘉宾发出邀请。
3-7 缩减名单 :你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。
以完成练习 3-6 时编写的程序为基础,在程序末尾添加一行代码,打印一条你只能邀请两位嘉宾共进晚餐的消息。
使用 pop() 不断地删除名单中的嘉宾,直到只有两位嘉宾为止。每次从名单中弹出一位嘉宾时,都打印一条消息,让该嘉宾知悉你很抱歉,无法邀请他来共进
晚餐。
对于余下的两位嘉宾中的每一位,都打印一条消息,指出他依然在受邀人之列。
使用 del 将最后两位嘉宾从名单中删除,让名单变成空的。打印该名单,核实程序结束时名单确实是空的。
3.3 组织列表
在你创建的列表中,元素的排列顺序常常是无法预测的,因为你并非总能控制用户提供数据的顺序。这虽然在大多数情况下都是不可避免的,但你经常需要以特定的顺序呈现信
息。有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。 Python 提供了很多组织列表的方式,可根据具体情况选用。
3.3.1 使用方法 sort() 对列表进行永久性排序
Python 方法 sort() 让你能够较为轻松地对列表进行排序。假设你有一个汽车列表,并要让其中的汽车按字母顺序排列。为简化这项任务,我们假设该列表中的所有值都是小写
的。
cars.py
cars = ['bmw', 'audi', 'toyota', 'subaru']
? cars.sort()
print(cars)
方法 sort() (见?)永久性地修改了列表