在Python中查找两个数字列表中缺失的数字的程序

在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],因为我们可以看到3不在 nums1 中,但它在 nums2 中,因此它缺失了;4在两个列表中都存在,但在 nums1 中只有一个,而在 nums2 中有两个,因此缺少一个4;同样,nums2 中有四个8,但在 nums1 中只有2个,因此缺少了两个。

为了解决这个问题,我们将采取以下步骤 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程