1. 程式人生 > 其它 >【筆記】Python | 03 | 列表 | 3.2 修改、新增和刪除元素

【筆記】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 have dinner with me.")
print("I want to invite " + guests_name[1].title() + "to have dinner with me.")
print("I want to invite " + guests_name[2].title() + "to have dinner with me.")

3-5 修改嘉賓名單

你剛得知有位嘉賓無法赴約,因此需要另外邀請一位嘉賓。

  • 以3-4的程式為基礎,在末尾列印一句話,指出哪位嘉賓無法赴約
  • 修改嘉賓名單,將無法赴約的嘉賓的姓名替換為新邀請的嘉賓的姓名
  • 再一次列印訊息,向名單中的每位嘉賓發出邀請
guests_name = ['grace', 'jersey', 'einstein']
print("I want to invite " + guests_name[0].title() + "to have dinner with me.")
print("I want to invite " + guests_name[1].title() + "to have dinner with me.")
print("I want to invite " + guests_name[2].title() + "to have dinner with me.")

print(guests_name[0].title() + " will not come for dinner.")
guests_name[0] = 'lily'
print("I want to invite " + guests_name[0].title() + "to have dinner with me.")
print("I want to invite " + guests_name[1].title() + "to have dinner with me.")
print("I want to invite " + guests_name[2].title() + "to have dinner with me.")

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 have dinner with me.")
print("I want to invite " + guests_name[1].title() + " to have dinner with me.")
print("I want to invite " + guests_name[2].title() + " to have dinner with me.")
print("I want to invite " + guests_name[3].title() + " to have dinner with me.")
print("I want to invite " + guests_name[4].title() + " to have dinner with me.")
print("I want to invite " + guests_name[5].title() + " to have dinner with me.")

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)