Python - 過濾兩個列表中對應相同索引的不同元素
索引是指元素在列表中的特定位置。兩個列表的不同元素是指那些索引在兩個列表中元素不匹配的索引。在 Python 中,我們有一些內建函式,如 enumerate()、zip()、filter() 等,可以用來過濾兩個列表中對應相同索引的不同元素。
讓我們來看一個例子
給定列表,
lst_1 = [10, 20, 30, 40, 50]
lst_2 = [1, 20, 3, 40, 50]
那麼最終結果將是 [20, 40, 50],這些元素來自列表,與對應的相同索引匹配。
語法
以下語法在示例中使用 -
enumerate()
enumerate() 是 Python 中的內建函式,它允許跟蹤迴圈迭代。
zip()
zip() 是 Python 中的內建函式,它接受任何型別的引數 - 列表、元組、字典、集合等等。
filter()
當我們需要根據特定條件過濾專案時,會應用 filter() 方法。簡單來說,它允許使用者迭代那些被提取出來滿足要求的元素。
lambda
Python 中的這個 lambda 函式被稱為匿名函式。當需要函式物件時,可以使用它。
list()
list() 是 Python 的內建函式,它建立列表物件,接受可迭代結構,並將其轉換為列表。
range()
range() 是 Python 中的內建函式,它返回給定範圍內的元素序列。預設情況下,初始範圍始終從 0 開始,並透過分配特定範圍結束。
append()
Python 中的 append 方法用於在列表末尾新增元素。
使用 enumerate() 函式
該程式使用內建函式 enumerate() 來跟蹤兩個列表的迭代,方法是接受一個名為 zip 的引數。這兩個函式都用於過濾兩個列表中的不同元素,並找到對應的相同索引以列印結果。
示例
在以下示例中,開始建立兩個輸入列表以在變數 - list1 和 list2 中設定隨機整數。然後它將使用列表推導式,其中 for 迴圈和 if 語句與 enumerate() 和 zip() 函式一起在一行中執行。所有這些過程都儲存在變數 res 中。最後,我們藉助 str(res) 列印結果。
# initialize lists
list1 = ["abc", "bcd", "c", "d"]
list2 = ["g", "b", "s", "d"]
# using list comprehension and enumerate()
res = [i for i, (val1, val2) in enumerate(zip(list1, list2)) if val1 != val2]
# result print
print("Unequal index elements in lists : " + str(res))
輸出
Unequal index elements in lists : [0, 1, 2]
使用 filter() 和 lambda 函式
該程式使用內建函式 filter() 來刪除不同的元素,並且使用內建函式 lambda 將計算兩個列表中的對應元素。
示例
在以下示例中,我們首先將在變數 - l1 和 l2 中建立兩個列表。然後使用內建函式list(),它接受可迭代結構filter()。filter() 接受兩個引數 - lambda(檢查兩個列表的對應相同索引)和zip(組合兩個列表以進行迭代),並將新的過濾元素儲存在變數 calc 中。接下來,建立列表推導式以將新元素列表儲存在變數 result 中。然後藉助變數 result 列印結果。
L1 = [11, 2, 3, 4, 5]
L2 = [1, 2, 3, 6, 5]
calc = list(filter(lambda x: x[0] == x[1], zip(L1, L2)))
result = [x[0] for x in calc]
print("The corresponding same index from two lists:",result)
輸出
The corresponding same index from two lists: [2, 3, 5]
使用 for 迴圈
該程式使用 for 迴圈迭代第一個列表,並使用 if 語句檢查兩個列表等價的條件,並使用內建函式 append() 返回結果。
示例
在以下示例中,我們將透過建立兩個列表並分別儲存在相應的變數中即 l1 和 l2 來啟動程式。然後在變數 result 中使用空列表[],它將儲存包含來自兩個字典的對應匹配項的列表。現在它將使用 for 迴圈,其中變數 i 使用內建函式 - range() 和 len() 迭代第一個列表,即 l1。使用 if 語句,它將檢查 l1 和 l2 之間模式匹配的條件。如果找到匹配項,則它將透過 append() 函式返回過濾列表結果。最後,我們藉助名為result的變數列印輸出。
# create the item list
l1 = [1, 20, 3, 40, 5]
l2 = [1, 2, 30, 6, 5]
result = []
for i in range(len(l1)):
if l1[i] == l2[i]:
result.append(l1[i])
print("The corresponding same index from two lists:", result)
輸出
The corresponding same index from two lists: [1, 5]
使用 Zip 和列表推導式
該程式使用內建函式 zip(),它允許迭代兩個以上的列表,並在 if 語句中使用等於“==”運算子,它將檢查對應的相同索引。
示例
在以下示例中,透過初始化兩個變數 - list_1 和 list_2 來儲存輸入列表來啟動程式。然後使用列表推導式建立一個新的列表 result,其中包含兩個列表中索引相同位置相等的元素。zip 函式用於連續迭代兩個列表。列表推導式內部的if 語句檢查兩個列表中相同索引處的元素是否相等。如果相等,則將該元素新增到變數result中。最後,藉助名為 result 的變數列印輸出。
# input list
list_1 = [1, 2, 3, 4, 5]
list_2 = [1, 2, 9, 6, 5]
# using zip inside the list comprehension
result = [x for x, y in zip(list_1, list_2) if x == y]
print("The corresponding same index from two lists:", result)
輸出
The corresponding same index from two lists: [1, 2, 5]
使用簡單的列表推導式
該程式使用列表推導式,其中迴圈和條件表示式在一行中定義,以過濾兩個列表中的不同元素。
示例
在以下示例中,在變數 - lst_1 和 lst_2 中建立兩個輸入列表,這些列表將用於過濾兩個列表中的不同元素。然後使用列表推導式技術,其中變數 i 使用內建函式len() 和 range() 迭代第一個列表。接下來,if 語句檢查兩個列表之間匹配的條件,以計算對應的相同索引,並在變數 res 中返回過濾結果。最後,它藉助名為res的變數列印結果。
# input list
lst_1 = [100, 200, 300, 400, 500]
lst_2 = [100, 2, 300, 6, 50]
# list comprehension
res = [lst_1[i] for i in range(len(lst_1)) if lst_1[i] == lst_2[i]]
print("The corresponding same index from two lists:", res)
輸出
The corresponding same index from two lists: [100, 300]
結論
我們討論瞭解決上述問題陳述的各種方法。過濾不同元素會刪除在兩個列表中都未發現相似的那些元素。這些程式通常用於各種應用程式,例如資料分析、資料同步、過濾搜尋結果和協同過濾。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP