【笔记】Python | 03 | 列表 | 3.2 修改、添加和删除元素


修改、添加和删除元素

我们会经常添加、修改、删除列表里的元素。在程序运行期间,列表的长度(也就是列表中元素的个数)将不断变化。

修改列表元素

修改元素与访问元素的方法类似,通过索引先指定要修改的元素,然后再赋新的值给元素。

motorcycles = ['honda', 'yamaha', 'suzuki']
# 打印这个列表
print(motorcycles)

# 将第一个元素修改为'ducati'
motorcycles[0] = 'ducati' 
print(motorcycles)

输出结果:

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

在列表中添加元素

有时需要往列表中添加元素

在列表末尾添加元素

最常见的就是在列表末尾添加元素,使用append()方法。append是附加、贴上、盖章的意思。

motorcycles = ['honda', 'yamaha', 'suzuki']
# 在末尾添加元素ducati
motorcycles.append('ducati')
print(motorcycles)

输出结果:

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

我们可以创建一个空列表,然后不断调用append(),添加多个元素。

motorcycles = []
motorcycles.append('bmw')
motorcycles.append('aima')
motorcycles.append('9bot')
print(motorcycles)

输出结果:

>>> ['bmw', 'aima', '9bot']

在列表中插入元素

我们使用insert()在列表任何位置插入元素,使用insert()需要指定新元素的索引和值。

motorcycles = ['honda', 'yamaha', 'suzuki']
# 在索引0处添加空间,将'ducati'存储在此
motorcycles.insert(0, 'ducati')

输出结果:

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

使用insert()会使既有的元素右移一个位置。

从列表中删除元素

删除元素有几种办法。

使用del()删除元素

使用del()删除元素时,需要知道元素的索引。

motorcycles = ['honda', 'yamaha', 'suzuki']
# 删除0位置的元素
del motorcycles[0]
print(motorcycles)

输出结果:

>>> ['yamaha', 'suzuki']

使用pop()删除元素

有时我们需要删除元素,但是还要使用这个被删除的元素的值。比如在游戏中,我们击杀了一个敌人,就需要将这个敌人从敌人列表中删掉,但同时我们需要获取敌人的位置信息,从而在相应的位置添加动画效果。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycles = motorcycles.pop()
print(motorcycles)
print(popped_motorcycles)

输出结果:

>>>
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

pop()(弹出)会删掉列表最后的元素。可以这么理解,列表是一个栈,删除末尾元素就是去掉栈顶的元素。

弹出列表中任意位置的元素

使用pop()弹出任意位置元素,只需要添加对应的索引

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
first_owned = motorcycles.pop(0)
print("The first motorcycle I owned was a " + first_owned.title() + ".")

输出结果:

>>>
['honda', 'yamaha', 'suzuki']
The first motorcycle I owned was a Honda.

根据值删除元素

有时候我们不知道元素的索引,但只要知道元素的值,就可以使用remove()删除之

motorcycles = ['ducati', 'honda', 'yamaha', 'suzuki']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove('ducati')
print(motorcycles)
print("\nA " + too_expensive.title() + "is too expensive for me.")

输出结果:

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

A Ducatiis too expensive for me.

remove()只能删除第一个值,如果有多个值需要循环处理。

练习题

3-4 嘉宾名单

如果你可以邀请任何一个人共进晚餐(无论是在世的还是已故的),你会邀请哪些人?创建一个列表,其中包含至少3个你想邀请的人。然后,使用这个列表打印消息,邀请这些人来与你共进晚餐。

guests_name = ['grace', 'jersey', 'einstein']

print("I want to invite " + guests_name[0].title() + "to dinner tonight.")
print("I want to invite " + guests_name[1].title() + "to dinner tonight.")
print("I want to invite " + guests_name[2].title() + "to dinner tonight.")

3-5 修改嘉宾名单

你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾。

  • 以3-4的程序为基础,在末尾打印一句话,指出哪位嘉宾无法赴约
  • 修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名
  • 再一次打印消息,向名单中的每位嘉宾发出邀请
guests_name = ['grace', 'jersey', 'einstein']

print("I want to invite " + guests_name[0].title() + "to dinner tonight.")
print("I want to invite " + guests_name[1].title() + "to dinner tonight.")
print("I want to invite " + guests_name[2].title() + "to dinner tonight.")

print(guests_name[0].title() + " will not come for dinner.")

guests_name[0] = 'lily'
print("I want to invite " + guests_name[0].title() + "to dinner tonight.")
print("I want to invite " + guests_name[1].title() + "to dinner tonight.")
print("I want to invite " + guests_name[2].title() + "to dinner tonight.")

3-6 添加嘉宾

你刚找到一个更大的餐桌,可容纳更多的嘉宾,请想想你还想邀请哪三位嘉宾。

  • 以3-4和3-5为基础,在末尾添加一条print语句,指出找到了更大的餐桌
  • 使用insert()语句将嘉宾添加到开头
  • 使用insert()语句将嘉宾添加到中间
  • 使用append()语句将最后一位嘉宾添加到末尾
  • 打印一系列语句,发出邀请
print("\nI have bought a bigger table.")

guests_name.insert(0, 'alex')
guests_name.insert(2, 'michael')
guests_name.append('tom')

print("I want to invite " + guests_name[0].title() + " to dinner tonight.")
print("I want to invite " + guests_name[1].title() + " to dinner tonight.")
print("I want to invite " + guests_name[2].title() + " to dinner tonight.")
print("I want to invite " + guests_name[3].title() + " to dinner tonight.")
print("I want to invite " + guests_name[4].title() + " to dinner tonight.")
print("I want to invite " + guests_name[5].title() + " to dinner tonight.")

3-7 缩减名单

你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。

  • 以3-6为基础,在末尾添加一行代码,告知只能邀请两位嘉宾
  • 使用pop()不断删除名单中的嘉宾,直到只有两位为止。每次删除都打印一条消息,让嘉宾知道你很抱歉,无法邀请他来
  • 对于余下的嘉宾都打印消息,指出他仍在邀请之列
  • 使用del()将最后两位嘉宾移出名单,打印空名单以确认都删除掉
print("I'm sorry to tell you that the new table I bought hasn't been delivered yet, \
    I'm afraid I can't invite you to dinner tonight.")

print(guests_name)
guest_deleted = guests_name.pop()
print("To " + guest_deleted.title() + ": I'm so sorry to tell you that \
I can't invite you to dinner tonight.")
guest_deleted = guests_name.pop()
print("To " + guest_deleted.title() + ": I'm so sorry to tell you that \
I can't invite you to dinner tonight.")
guest_deleted = guests_name.pop()
print("To " + guest_deleted.title() + ": I'm so sorry to tell you that \
I can't invite you to dinner tonight.")
guest_deleted = guests_name.pop()
print("To " + guest_deleted.title() + ": I'm so sorry to tell you that \
I can't invite you to dinner tonight.")

print("To " + guests_name[0].title() + ": I'd like to invite you to \
dinner tonight.")
print(guests_name)
print("To " + guests_name[1].title() + ": I'd like to invite you to \
dinner tonight.")
print(guests_name)

del guests_name[0]
del guests_name[0]
print(guests_name)