Python - 刪除滿足特定條件的前 K 個元素


簡介

Python 是一種高階解釋型程式語言,廣泛應用於 Web 開發、科學計算、資料分析和人工智慧等眾多領域。這種靈活的語言可以實現各種目標。列表被認為是 Python 中最實用的資料結構之一。它包含一系列不同資料型別的專案。Python 是一種靈活而強大的程式語言,它為各種任務提供了大量的實用程式和模組。

處理資料時,一個常見任務是從列表中刪除滿足特定條件的元素。可變列表允許在其建立後修改其元素。本文深入探討了從列表中刪除滿足特定條件的初始 K 個元素的過程。各種程式設計場景都可以受益於此過程。

定義

我們的目標是從列表中刪除滿足特定條件的初始 K 個元素。根據特定條件從列表中刪除元素的過程需要遍歷每個元素,或者簡單地說,迭代列表的每個元素並檢查它是否滿足給定條件。之後,刪除任何匹配的元素。刪除後,列表將只包含不滿足條件的元素。

演算法

  • 第一步包括定義需要檢查的列表和條件。

  • 為了記錄已刪除專案的數量,在步驟 2 中開始設定計數器變數。

  • 在步驟 3 中使用 while 迴圈重複遍歷列表。檢查計數器變數 (count) 是否小於 k,以及索引 (i) 是否在列表範圍內。

  • 在步驟 4 中,在迴圈內檢查當前元素是否滿足指定的條件。如果滿足條件,則從列表中刪除該元素並增加計數 (count)。

  • 如果元素不滿足條件,則透過增加索引 (i) 轉到下一個元素。

方法

  • 方法 1 — 使用 ‘while’ 迴圈和 ‘pop()’ 方法。

  • 方法 2 — 使用列表推導式刪除。

方法 1 — 使用 ‘while’ 迴圈和 ‘pop()’ 方法。

示例

k = 3
condition = lambda x: x % 2 == 0
lst = [1, 2, 3, 4, 6, 8, 7, 8, 1, 10]
i = 0
while i < len(lst) and k > 0:
   if condition(lst[i]):
      lst.pop(i)
      k -= 1
   else:
      i += 1
print(lst)

輸出

[1, 3, 8, 7, 8, 1, 10]

解釋

變數 'k' 保持一個值,表示要從提供的列表中刪除的偶數個數。透過使用 x 模 2 等於零的約束,此 lambda 表示式驗證提供的數字是否為偶數整數。Python 程式設計中提供了一個有用的工具。列表中的當前索引由變數 i 表示,i 等於零。只要列表的長度超過 i,while 迴圈將繼續迭代。遇到的偶數的計數大於零。

迴圈內

如果現有元素 (lst[i]) 滿足條件(為偶數),則透過 lst.pop(i) 將其從列表中刪除。之後,k 減 1。如果當前元素不滿足條件(為奇數),則迴圈透過將 i 增加 1 轉到下一個元素。當迴圈完成或 k 等於 0 時(表示所需刪除的偶數計數),使用 print(lst) 列印修改後的列表。初始列表保持不變,只是排除了最初的三個偶數 2、4 和 6。

方法 2 — 使用列表推導式刪除。

示例

def remove_elements_matching_condition(lst, condition, k):
   count = 0
   return [num for num in lst if not (condition(num) and (count := count + 1) <= k)]

# Example usage
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
condition = lambda x: x % 2 == 0  # Remove even numbers
k = 3

result = remove_elements_matching_condition(numbers, condition, k)
print(result)

輸出

[1, 3, 5, 7, 8, 9, 10]

解釋

函式 remove_elements_matching_condition 接受三個引數。要刪除的偶數個數、要驗證的條件和 lst(輸入列表)。

程式碼使用列表推導式生成一個包含所需元素的新列表。以下是它的工作原理

初始化時將計數器變數設定為 0。

使用列表推導式迭代輸入列表 lst 中的每個元素 num。

對於每個元素,評估既不滿足 'num' 條件也不使計數器變數超過 'k' 的狀態。

函式 "condition(num)" 驗證元素是否滿足為偶數的指定條件。

每當遇到偶數時,計數器變數就會遞增 1。

此表示式確保只刪除最初的 k 個偶數,同時在每次迭代時將計數器變數遞增 1。

鑑於初始語句:“Not (condition(num) and (count := count + 1) <= k)”,該語句的含義是“否定該條件以包括不滿足該條件的元素或已達到 k 的元素”。

獲得的列表包含滿足條件的元素。遇到的前 k 個偶數不包括這些元素。結果輸出中排除了原始列表中的前三個偶數(2、4 和 6)。其餘元素保持不變。透過使用列表推導式並跟蹤遇到的偶數(計數),程式碼完成了這項任務。透過這樣做,它確保只刪除最初的 k 個偶數。

該程式碼預計可在支援列表推導式和賦值表示式的 Python 版本(包括 Python 3.8 及更高版本)上執行。在使用列表推導式和舊版本的 Python 時,建議依靠傳統的基於迴圈的方法來實現預期的功能。

結論

Python 中通常會根據特定條件刪除列表元素的任務。選擇適合您特定用例的方法至關重要。使用列表推導式可以清晰簡潔地建立新的列表。透過迭代刪除直接修改原始列表。根據您的需求,考慮在建立新列表或修改現有列表時所涉及的權衡。Python 憑藉其廣泛的庫生態系統和靈活性,為資料操作任務提供了極好的選擇。一個例子是從列表中刪除依賴於某些條件的專案。

瞭解各種方法後,您可以有效地操作列表並使其適應您的特定需求。

更新於:2023年10月9日

63 次瀏覽

開啟您的職業生涯

完成課程獲得認證

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