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]
广告