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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告