用 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 中
- 如果 c1[n] 与 c2[n] 不相同,则
- 如果 n 不在 c1 中,则
- 返回 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 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

