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]|次
  • 返回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]

更新於:2021年10月12日

385 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告