Python程式:查詢兩個數字列表中缺失的數字
假設我們有兩個數字列表,例如nums1和nums2。它們包含一些元素,這些元素不一定是唯一的。但是這兩個列表實際上代表同一組數字的不同排列。然而,其中一些數字缺失了。我們必須找到這兩個列表中缺失的數字並打印出來。
因此,如果輸入類似於nums1 = [4,5,8,8,6,9] nums2 = [3,4,4,8,8,8,6,9,5,8],則輸出將為[3,4,8,8],因為我們可以看到nums1中沒有3,但在nums2中存在,因此它缺失。4在兩者中都存在,但在nums2中有兩個4,而在nums1中只有一個,因此缺少一個4。同樣,nums2中有四個8,但在nums1中只有兩個,因此缺少兩個。
為了解決這個問題,我們將遵循以下步驟:
- c1:= 包含nums1中每個元素頻率的列表
- c2:= 包含nums2中每個元素頻率的列表
- all_nums:= 包含nums1和nums2中所有不同數字的集合
- res:= 一個新列表
- 對於all_nums中的每個n,執行以下操作:
- 如果c1中不存在n,則
- 將n插入res中,c2[n]次
- 否則,如果c2中不存在n,則
- 將n插入res中,c1[n]次
- 否則,
- 如果c1[n]與c2[n]不同,則
- 將n插入res中,|c1[n]- c2[n]|次
- 如果c1[n]與c2[n]不同,則
- 如果c1中不存在n,則
- 返回res
示例
讓我們看看下面的實現以更好地理解:
from collections import Counter def solve(nums1, nums2): c1 = Counter(nums1) c2 = Counter(nums2) all_nums = set(nums1) | set(nums2) res = [] for n in all_nums: if n not in c1: res = res + [n]*c2[n] elif n not in c2: res = res + [n]*c1[n] else: if c1[n] != c2[n]: res = res + [n]*abs(c1[n]- c2[n]) return res nums1 = [4,5,8,8,6,9] nums2 = [3,4,4,8,8,8,6,9,5,8] print(solve(nums1, nums2))
輸入
[4,5,8,8,6,9], [3,4,4,8,8,8,6,9,5,8]
輸出
[3, 4, 8, 8]
廣告