在 Python 中從列表(數組)中刪除元素:clear()、pop()、remove()、del

商業

要從 Python 中列表類型的列表(數組)中刪除元素,請使用列表方法 clear()、pop() 和 remove()。您還可以使用 index 或 slice 指定列表的位置和範圍,然後使用 del 語句將其刪除。

此處提供了以下信息。

  • 刪除所有元素:clear()
  • 刪除指定位置的元素並獲取其值。:pop()
  • 搜索具有指定值的元素並刪除第一個元素。:remove()
  • 通過在索引切片中指定位置和範圍來刪除:del
  • 批量刪除多個符合條件的元素。:列表包含指示

請注意,列表可以存儲不同類型的數據,並且與數組完全不同。當您要為需要內存大小或內存地址的進程處理數組,或用於大規模數據的數值計算時,請使用數組(標準庫)或 NumPy。

刪除所有元素:clear()

在 list 方法 clear() 中,所有元素都被刪除,從而產生一個空列表。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

刪除指定位置的元素並獲取其值。:pop()

列表的方法 pop() 可用於刪除指定位置的元素並獲取該元素的值。

第一個(初始)數字是 0。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

負值也可用於指定從結尾(最後)開始的位置。結尾(最後一個)是-1。

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

如果省略參數且未指定位置,則刪除末尾(最後一個)的元素。

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

指定不存在的位置將導致錯誤。

# print(l.pop(100))
# IndexError: pop index out of range

請注意,刪除第一個元素的 pop(0) 需要以下成本並且不是有效的操作。有關列表上各種操作的計算複雜性,請參閱官方 wiki 上的以下頁面。
O(n)

O(1)deque 類型在標準庫集合模塊中提供為一種類型,它以這種代價將元素刪除到頂部。例如,如果要將數據視為隊列(FIFO),則使用 deque 效率更高。

搜索具有指定值的元素並刪除第一個元素。:remove()

列表方法 remove() 可用於搜索與指定值相同的元素並刪除第一個元素。

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

如果列表包含多個與指定值匹配的元素,則僅刪除第一個元素。

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

如果指定了不存在的值,則會發生錯誤。

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

通過在索引切片中指定位置和範圍來刪除:del

您還可以使用 del 語句從列表中刪除元素。

通過索引指定要刪除的元素。第一個(初始)索引為 0,最後一個(最終)索引為 -1。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

如果您使用切片指定範圍,則可以一次刪除多個元素。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]

也可以指定整個範圍並刪除所有元素。

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]如果以這種方式指定切片中的範圍並指定增量步長,則可以一次刪除多個跳躍元素。

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

有關切片的詳細信息,請參閱以下文章。

批量刪除多個符合條件的元素。:列表包含指示

刪除滿足條件的元素的過程等價於留下(提取)不滿足條件的元素的過程。列表理解符號用於這種處理。

刪除奇數或偶數元素(= 留下偶數或奇數元素)的示例如下所示。
%這是餘數運算符。
i % 2
這是 i 除以 2 的餘數。

在列表理解符號中,創建了一個新列表。與迄今為止介紹的列表類型方法不同,原始列表保持不變。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]

print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

其他例子。根據條件表達式,可以進行各種處理。

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

如果要刪除重複元素,請使用 set set 類型。

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']