要從 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]
有關切片的詳細信息,請參閱以下文章。
批量刪除多個符合條件的元素。:列表包含指示
刪除滿足條件的元素的過程等價於留下(提取)不滿足條件的元素的過程。列表理解符號用於這種處理。
- 相關文章:使用 Python 列表推導符號
刪除奇數或偶數元素(= 留下偶數或奇數元素)的示例如下所示。%
這是餘數運算符。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']