CodeGym /課程 /Python SELF TW /列表的實作

列表的實作

Python SELF TW
等級 7 , 課堂 9
開放

9.1 創建列表的副本

在 Python 中創建列表的副本是一個重要的任務,可能需要避免在操作列表時數據發生意外變化。在操作列表時,重要的是要理解淺拷貝 (shallow) 和深拷貝 (deep) 之間的區別。

淺拷貝

淺拷貝創建一個新的列表,但元素保持不變(如果元素是引用,則它們作為引用被複製)。這可以通過多種方式完成:

使用 list() 函數:


original = [1, 2, 3]
copy = list(original)

使用切片:


original = [1, 2, 3]
copy = original[:]

copy() 方法:

深拷貝

深拷貝創建一個新列表,其中還創建所有嵌套對象的副本。這在列表包含其他可變數據類型(如其他列表)時尤其重要。為此,我們使用 copy 模塊:


import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)

何時使用每種方法

淺拷貝較快,適用於簡單或不需要複製的列表元素(例如字串或數字)。當列表元素本身是可變集合或當副本的更改不應反映在原始列表中時,需要進行深拷貝。

9.2 刪除列表中的元素

這是一項既簡單又複雜的任務:在循環中從列表中刪除元素。

當我們使用 for 循環遍歷列表時,列表返回一個特殊的子對象——迭代器,迭代器被 for 循環使用來遍歷其所有元素。而如果在使用迭代器的過程中 [由 for 循環] 刪除列表中的元素,迭代器可能會出現錯誤。

如果刪除了第 3 個元素,那麼第 4 個會自動成為第 3 個。可是 for 循環,通過迭代器,會切換到新的第 4 個元素,這原本是第 5 個。於是第 4 個元素會被跳過。

以下是幾種安全刪除元素的方法:

使用 remove() 方法

如果確切知道要刪除哪個元素,可以在循環中使用 remove()。然而,這在元素很多時可能低效,因為每次調用 remove() 都會在刪除前查找元素,這會減慢運行速度。

創建新列表

更安全的方法是創建一個只包含需要保留的元素的新列表:


original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0]  # 只保留奇數

使用索引

可以使用反向索引的 for 循環來刪除元素而不會跳過:


for i in range(len(original_list) - 1, -1, -1):
    if original_list[i] % 2 == 0:  # 刪除條件
        del original_list[i]

當我們從列表末尾開始遍歷時,刪除的元素只會改變已經遍歷過的元素的索引。

使用列表副本:

假設你想刪除列表中的所有負數:


numbers = [1, -1, 2, -2, 3, -3]
# 創建列表副本以安全迭代
for number in numbers.copy():
    if number < 0:
        numbers.remove(number)
print(numbers) # 打印 [1, 2, 3]

9.3 合併列表

經常需要將兩個或多個列表連接成一個。這可以通過多種方式完成,每種方式適合於不同的任務,並具有其獨特性。

使用 + 運算符

合併兩個列表的最簡單方法是使用 + 運算符。這是一種直接且直觀的方法:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list)  # 打印 [1, 2, 3, 4, 5, 6]

extend() 方法

extend() 方法修改第一個列表,將第二個列表的所有元素添加到其末尾。這會改變原始列表:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)  # 打印 [1, 2, 3, 4, 5, 6]

列表生成式 (List Comprehensions)

可以使用列表生成式創建一個新列表,將多個列表的元素組合到一個複雜的列表中:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list)  # 打印 [1, 2, 3, 4, 5, 6]

append() 方法

可以一個一個地將第二個列表的所有元素添加到第一個列表中。就是這麼回事。


list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
    list1.append(x)
print(list1)  # 打印 [1, 2, 3, 4, 5, 6]

基本上,這就是我想要告訴你們關於列表的一切 😊

1
問卷/小測驗
列表在 Python,等級 7,課堂 9
未開放
列表在 Python
列表在 Python
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION