从列表中删除元素

你经常需要从列表中删除一个或多个元素。例如,玩家将一个外星人消灭后,你很可能要将其从存活的外星人列表中删除;
当用户在你创建的 Web 应用程序中注销账户时,你需要将该用户从活动用户列表中删除。你可以根据位置或值来删除列表中的元素。

使用 del 语句删除元素

如果知道要删除的元素在列表中的位置,可使用 del 语句:

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

del motorcycles[0]
print(motorcycles)

这里使用 del 语句删除了列表 motorcycles 中的第一个元素 ‘honda’:

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

使用 del 可删除任意位置的列表元素,只需要知道其索引即可。例如,下面演示了如何删除列表 motorcycles 中的第二个元素 ‘yamaha’:”

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

del motorcycles[1]
print(motorcycles)

下面的输出表明,已经将第二款摩托车从列表中删除了:

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

在这两个示例中,使用 del 语句将值从列表中删除后,你就无法再访问它了

使用 pop() 方法删除元素

pop() 方法删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
下面来从列表 motorcycles 中弹出一款摩托车:

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

❷ popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

首先定义并打印了列表 motorcycles(见❶)。接下来,从这个列表中弹出一个值,并将其赋给变量 popped_motorcycle(见❷)
然后打印这个列表,以核实从中删除了一个值(见❸)。最后打印弹出的值,以证明依然能够访问被删除的值(见❹)。
输出表明,列表末尾的值 ‘suzuki’ 已删除,它现在被赋给了变量 popped_motorcycle:

1
2
3
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki”

删除列表中任意位置的元素

1
2
3
4
5
6
实际上,也可以使用 pop() 删除列表中任意位置的元素,只需要在括号中指定要删除的元素的索引即可。

motorcycles = ['honda', 'yamaha', 'suzuki']

first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")

首先弹出列表中的第一款摩托车,然后打印一条有关这辆摩托车的消息。输出是一个简单的句子,描述了我购买的第一辆摩托车:

1
The first motorcycle I owned was a Honda.

别忘了,每当你使用 pop() 时,被弹出的元素就不再在列表中了。

根据值删除元素

有时候,你不知道要从列表中删除的值在哪个位置。如果只知道要删除的元素的值,可使用 remove() 方法。
假设要从列表 motorcycles 中删除值 ‘ducati’:

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

motorcycles.remove('ducati')
print(motorcycles)

remove() 方法让 Python 确定 ‘ducati’ 出现在列表的什么地方,并将该元素删除:

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

使用 sort() 方法对列表进行永久排序

Python 方法 sort() 让你能够较为轻松地对列表进行排序。假设你有一个汽车列表,并要让其中的汽车按字母顺序排列。
为了简化这项任务,假设该列表中的所有值都是全小写的。

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

sort() 方法能永久地修改列表元素的排列顺序。现在,汽车是按字母顺序排列的,再也无法恢复到原来的排列顺序:

1
['audi', 'bmw', 'subaru', 'toyota']

还可以按与字母顺序相反的顺序排列列表元素,只需向 sort() 方法传递参数 reverse=True 即可。
下面的示例将汽车列表按与字母顺序相反的顺序排列:

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

同样,对列表元素排列顺序的修改也是永久的:

1
['toyota', 'subaru', 'bmw', 'audi']

使用 sorted() 函数对列表进行临时排序

要保留列表元素原来的排列顺序,并以特定的顺序呈现它们,可使用 sorted() 函数。
sorted() 函数让你能够按特定顺序显示列表元素,同时不影响它们在列表中的排列顺序。
下面尝试对汽车列表调用这个函数。

1
2
3
4
5
6
7
8
9
10
cars = ['bmw', 'audi', 'toyota', 'subaru']

print("Here is the original list:")
print(cars)

print("\nHere is the sorted list:")
print(sorted(cars))

print("\nHere is the original list again:")
print(cars)

首先按原始顺序打印列表(见❶),再按字母顺序显示该列表(见❷)。以特定顺序显示列表后进行核实,确认列表元素的排列顺序与以前相同(见❸)。

1
2
3
4
5
6
7
8
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

❶ Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

注意,在调用 sorted() 函数后,列表元素的排列顺序并没有变(见❶)。如果要按与字母顺序相反的顺序显示列表,也可向 sorted() 函数传递参数 reverse=True。

确定列表的长度

使用 len() 函数可快速获悉列表的长度。在下面的示例中,列表包含 4 个元素,因此其长度为 4:

1
2
3
 cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)
4