如何修改Python代码,实现两列表共有元素出现次数完全匹配校验?
实现列表元素出现次数匹配校验
需求:校验第一个列表中的每个元素,在第二个列表中的出现次数与该元素在第一个列表中的出现次数完全相同;只要有一个共有元素的出现次数不一致,就返回False。
你当前的代码仅通过all(ele in List_2 for ele in List_1)判断元素是否存在,无法校验出现次数,所以示例2会返回不符合预期的结果。
解决方案:使用collections.Counter统计元素次数
Python标准库中的Counter类专门用于统计可哈希对象的出现次数,用它可以轻松实现需求:
- 分别统计两个列表的元素出现次数
- 遍历第一个列表的所有唯一元素,检查每个元素在第二个列表中的计数是否和第一个列表完全一致
- 所有元素都满足则返回True,否则返回False
修改后的代码示例
示例1(符合预期)
from collections import Counter List_1 = [1, 2, 2] List_2 = [1, 2, 2, 3, 4] print("First list is", List_1) print("Second list is", List_2) count_list1 = Counter(List_1) count_list2 = Counter(List_2) # 校验每个元素的出现次数是否完全匹配 result = all(count_list2[element] == count_list1[element] for element in count_list1) print(f"Output: {result}")
输出结果:
First list is [1, 2, 2] Second list is [1, 2, 2, 3, 4] Output: True
示例2(符合预期)
from collections import Counter List_1 = [1, 2] List_2 = [1, 2, 2, 3, 4] print("First list is", List_1) print("Second list is", List_2) count_list1 = Counter(List_1) count_list2 = Counter(List_2) result = all(count_list2[element] == count_list1[element] for element in count_list1) print(f"Output: {result}")
输出结果:
First list is [1, 2] Second list is [1, 2, 2, 3, 4] Output: False
补充说明
Counter会自动处理元素不存在的情况,此时对应计数为0- 我们只需要对比第一个列表中存在的元素,第二个列表中额外的元素不影响校验结果,完全符合需求
- 该方法时间复杂度为O(n+m),其中n和m分别是两个列表的长度,效率较高
内容的提问来源于stack exchange,提问作者Arnu C.
相关产品推荐
相关产品推荐

