如何在 Python 列表中刪除 True 值?


在 Python 中,列表可能是最常用的資料結構,允許我們儲存不同的元素。有時,我們可能會遇到需要從列表中刪除特定元素的情況。在本文中,我們將討論五種不同的方法來從 Python 列表中刪除 True 值。我們將檢查演算法、給出程式碼示例、顯示結果,並最後總結這些方法。

介紹

假設我們有一個包含布林型別和不同資料型別的組合的列表,我們需要從中刪除所有 True 值。Python 提供了幾種方法來完成此任務。我們將探討 6 種不同的方法來處理不同的偏好和用例。

讓我們首先檢視一個示例輸入和輸出。

輸入

[True, 2, False, True, 4, True, 6, True]

輸出

[2, False, 4, 6]

說明:True 是一個布林值,表示邏輯真狀態。有兩個內建的布林常量,分別是 True 和 False。

我們的目標是從列表中刪除 True 值,並保留所有其他值。在上面的輸入中,True 出現在位置(而非索引)1、4、6、8,這些位置被刪除,因此只剩下列表中其餘的值 2、False、4 和 6。

方法 1:樸素方法

演算法

  • 建立一個名為 delete_true_naive 的函式,它接受一個數據列表作為引數。

  • 初始化一個列表索引變數為 0。

  • 當列表的長度不等於輸入列表的長度時

  • 如果當前列表元素為 True,則使用 pop() 方法將其刪除。

  • 否則,將列表索引加 1。

  • 返回修改後的資料列表

示例

def delete_true_naive(input_list):
    index = 0
    while index < len(input_list):
        if input_list[index] == True:
            input_list.pop(index)
        else:
            index += 1
    return input_list
sample_list = [True, 2, False, True, 4, True, 6, True]
print("Naive Method Output:", delete_true_naive(sample_list.copy()))

輸出

Naive Method Output: [2, False, 4, 6]

方法 2:使用列表推導式

演算法

  • 建立一個名為 delete_true_list_comprehension 的函式,它接受一個數據列表作為引數。

  • 使用列表推導式建立一個新的列表,該列表僅包含資料列表中不等於 True 的元素。

  • 返回新列表。

示例

def delete_true_list_comprehension(input_list):
    return [element for element in input_list if element != True]

sample_list = [True, 2, False, True, 4, True, 6, True]
print("Using list comprehension output:", delete_true_list_comprehension(sample_list.copy()))

輸出

Using list comprehension output: [2, False, 4, 6]

方法 3:使用 filter() 函式和 Lambda 函式

演算法

  • 建立一個名為 delete_true_filter 的函式,它接受一個數據列表作為引數。

  • 使用 filter() 函式和一個 lambda 函式來過濾資料列表中不等於 True 的元素。

  • 使用 list() 函式將過濾後的結果轉換回列表。

  • 返回過濾後的列表。

示例

def delete_true_filter(input_list):
    return list(filter(lambda x: x != True, input_list))
sample_list = [True, 2, False, True, 4, True, 6, True]
print("Using filter() Result:", delete_true_filter(sample_list.copy()))

輸出

Using filter() Result: [2, False, 4, 6]

方法 4:使用 remove()

演算法

  • 建立一個名為 delete_true_remove 的函式,它接受一個數據列表作為引數。

  • 使用 while 迴圈,只要 True 存在於資料列表中就重複迴圈。

  • 在迴圈內部,使用 remove() 方法刪除列表中 True 的第一個出現。

  • 返回修改後的資料列表。

示例

def delete_true_remove(input_list):
    while True in input_list:
        input_list.remove(True)
    return input_list 
sample_list = [True, 2, False, True, 4, True, 6, True]
print("Using remove() Result:", delete_true_remove(sample_list.copy()))

輸出

Using remove() Result: [2, False, 4, 6]

方法 5:使用列表推導式和 enumerate() 函式

演算法

  • 建立一個名為 delete_true_enum 的函式,它接受一個數據列表作為引數。

  • 結合使用列表推導式和 enumerate() 函式來遍歷資料列表,同時跟蹤每個元素的索引和值。

  • 只將值不等於 True 的元素新增到新列表中。

  • 返回新列表。

示例

def delete_true_enum(input_list):
    return [value for index, value in enumerate(input_list) if value != True]
# Sample list
sample_list = [True, 2, False, True, 4, True, 6, True]
# Output
print("Using List Comprehension and enumerate() Output:", delete_true_enum(sample_list.copy()))

輸出

Using List Comprehension and enumerate() Output: [2, False, 4, 6]

方法 6:使用 itertools.filterfalse()

itertools 模組通常用於處理迭代場景,filterfalse 用於返回從指定函式返回 False 值的值。它接收兩個輸入:函式;要迭代的物件;filterfalse 返回的值是那些在傳遞給函式(作為引數)後返回 False 的值。

演算法

  • 首先,我們從 itertools 模組匯入 **filterfalse()** 函式。

  • 下一步是建立一個名為 **delete_true_itertools** 的函式,它接受一個輸入列表作為引數。

  • 然後,我們使用 **filterfalse()** 和一個 lambda 函式來過濾列表中 True 值。

  • 之後,我們使用 **list()** 函式將過濾後的結果轉換回列表。

  • 最後,返回不包含 True 值的新列表。

示例

from itertools import filterfalse

def delete_true_itertools(input_list):
    return list(filterfalse(lambda x: x == True, input_list))

sample_list = [True, 2, False, True, 4, True, 6, True]
print("Using itertools.filterfalse() Result:", delete_true_itertools(sample_list.copy()))

輸出

Using itertools.filterfalse() Result: [2, False, 4, 6]

結論

在這篇文章中,我們學習了六種不同的方法來從 Python 列表中刪除 True 值,包括樸素方法、列表推導式、帶有 lambda 函式的 filter()、remove 函式以及結合使用列表推導式和 enumerate()。最後,itertools 模組的 filterfalse 函式也屬於可用的方法之一。最佳方法將取決於具體的用例和效能要求,儘管對於較小的列表,所有方法都可以有效地刪除 True 值。

更新於:2023年8月29日

瀏覽量:254

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.