從 Python 列表中刪除某元素的所有出現

Sahil Bhosale 2023年1月30日 2021年2月28日
  1. 在 Python 中使用 filter() 函式從列表中刪除一個元素的所有例項
  2. 在 Python 中使用列表推導式從列表中刪除元素的所有例項
  3. 使用 remove() 函式從 Python 中刪除一個元素的所有例項
從 Python 列表中刪除某元素的所有出現

在 Python 中,列表允許同一個元素多次出現。即使一個元素的值可能與其他元素相同,但每個元素都會有一個不同的索引。使用這些索引號,你可以很容易地訪問任何你想要的元素。

但是,在某些情況下,你可能不想要同一元素的多個例項;那麼,你肯定會想要從列表中刪除所有這些特定元素的出現。在 Python 中,有不同的方法可以實現這一點。

在 Python 中使用 filter() 函式從列表中刪除一個元素的所有例項

在 Python 中,藉助於 filter() 函式,過濾元素變得更加容易。filter() 函式需要兩個引數,第一個引數是一個函式,第二個引數可以是集合、列表、元組等。

示例 1:帶有 __ne__filter() 函式

myList = [2, 1, 3, 5, 1, 1, 1, 0]
myList = list(filter((1).__ne__, myList))
print(myList)

輸出:

[2, 3, 5, 0]

在這個例子中,你有一個列表 myList,你想從中刪除所有出現的 1filter() 函式接受另一個函式 __ne__,它將根據 1 是否存在於列表 myList 中,返回一個 TrueFalse 的布林值。如果值 1 存在於列表中,那麼它將直接丟棄它。然後,無論 filter() 函式返回的是什麼,都將使用 list() 函式將其轉換為一個列表。

示例 2:帶有 lambda 函式的 filter() 函式

myList = [2, 1, 3, 5, 1, 1, 1, 0]
valueToBeRemoved = 1

result = filter(lambda val: val !=  valueToBeRemoved, myList) 
print(list(result)) 

輸出:

[2, 3, 5, 0]

我們沒有傳遞 __ne__ 函式,而是傳遞一個 lambda 函式給 filter() 函式。

從列表 myList 中,你將逐個提取每個元素並將其儲存在 val 變數中。如果存在於 valvalueToBeRemoved 中的元素不相等,只有那些存在於 val 中的元素會被新增到新的變數 result 中。你應該使用 list() 函式將 result 轉換為一個列表。

在 Python 中使用列表推導式從列表中刪除元素的所有例項

列表推導式是一種簡短的程式碼編寫方式。列表推導式比一般的函式和迴圈快。

示例程式碼:

myList = [1, 2, 3, 4, 2, 2, 3]
valueToBeRemoved = 2

myList = [value for value in myList if value != valueToBeRemoved]

print(myList)

輸出:

[1, 3, 4, 3]

你有一個列表 myList,你想從其中刪除元素 2 的出現。刪除一個元素的所有例項的主要程式碼位於方括號 [] 內。這裡,for 迴圈將首先執行,然後它將從列表 myList 中獲取一個值並將其儲存在 value 變數中。之後,如果 value 變數裡面的值和 valueToBeRemoved 變數不匹配,它就只會返回 value 變數的值,並將其儲存在列表 myList 中。這個過程將一直持續到列表變空。最後,你將擁有一個包含你想要的輸出的列表。

使用 remove() 函式從 Python 中刪除一個元素的所有例項

remove() 函式只刪除元素的第一次出現。如果你想使用 remove() 函式刪除元素的所有出現,你可以使用 for 迴圈或 while 迴圈。

myList = [2, 1, 3, 5, 1, 1, 1, 0]
valueToBeRemoved = 1
 
try:
    while True:
        myList.remove(valueToBeRemoved)
except ValueError:
    pass
 
print(myList)

輸出:

[2, 3, 5, 0]

在上面的程式碼中,你建立了一個列表 myList,然後你有一個變數 valueToBeRemoved,它將包含你想從列表中刪除的元素,在這個例子中 1。當迴圈瀏覽列表時,如果該元素在列表中,將使用 remove() 函式從列表中刪除。

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

相關文章 - Python List