用 Python 编写程序从两个数字列表中查找缺失的数字

pythonserver side programmingprogramming更新于 2025/12/23 16:12:17

假设我们有两个数字列表,即 nums1 和 nums2。有些元素不一定是唯一的。但这两个列表实际上代表同一组数字的不同排列。但是,其中一些是缺失的。我们必须找出这两个列表中缺失的数字并将它们全部打印出来。

因此,如果输入为 nums1 = [4,5,8,8,6,9] nums2 = [3,4,4,8,8,8,6,9,5,8],则输出将为 [3,4,8,8],因为我们可以看到 3 不存在于 nums1 中,但它存在于 nums2 中,因此它缺失。4 存在于两者中,但在 nums2 中有两个 4,但在 nums1 中只有一个,因此缺少一个 4。类似地,nums2 有四个 8,但 nums1 只有 2 个,因此缺少两个。

为了解决这个问题,我们将遵循以下步骤 −

  • c1 := 一个列表,其中包含 nums1 中出现的每个元素的频率
  • c2 := 一个列表,其中包含 nums2 中出现的每个元素的频率
  • all_nums := 一个集合,其中包含来自 nums1 和 nums2 的所有不同数字
  • res := 一个新列表
  • 对于 all_nums 中的每个 n,执行
    • 如果 n 不在 c1 中,则
      • 将 n、c2[n] 次插入 res
    • 否则,当 n 不在 c2 中时,则
      • 将 n, c1[n] 次插入到 res 中
    • 否则,
      • 如果 c1[n] 与 c2[n] 不相同,则
        • 将 n, |c1[n]- c2[n]| 次插入到 res 中
  • 返回 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]

相关文章


有用资源