如何查找List中重复出现指定x次的元素?
实现思路
要提取恰好重复x次的元素,只需要在你现有获取重复元素的逻辑基础上,增加频次匹配的过滤规则即可,整体分为两步:
- 第一步:遍历目标List,统计每个元素的出现次数,生成「元素-出现次数」的映射表
- 第二步:遍历映射表,筛选出出现次数恰好等于指定值x的元素,即为最终结果
通用实现逻辑(不依赖语言内置工具)
如果不想用语言自带的统计工具,可以手动实现统计逻辑:
- 初始化一个空哈希表(字典/Map)用于存储元素和对应计数
- 遍历原List的每一个元素:
- 元素已存在于哈希表中时,对应计数+1
- 元素不存在于哈希表中时,将元素存入哈希表,计数初始化为1
- 遍历哈希表的所有键值对,收集计数等于x的键,就是你需要的结果
常见语言代码示例
Python 实现
可以用collections.Counter快速完成频次统计:
from collections import Counter def get_elements_with_x_occurrences(input_list, target_count): count_map = Counter(input_list) # 筛选恰好出现target_count次的元素 return [elem for elem, count in count_map.items() if count == target_count] # 测试用例 test_list = [1,2,2,3,3,3,4,4,4,4] print(get_elements_with_x_occurrences(test_list, 3)) # 输出:[3]
如果需要只筛选重复出现的(即排除出现1次的),只要在过滤条件中额外加count > 1的判断即可,和你现有获取重复元素的逻辑完全兼容。
Java 8+ 实现
用Stream流配合groupingBy实现:
import java.util.List; import java.util.stream.Collectors; public class FrequencyFilter { public static <T> List<T> getElementsWithXOccurrences(List<T> inputList, int targetCount) { return inputList.stream() .collect(Collectors.groupingBy(elem -> elem, Collectors.counting())) .entrySet() .stream() .filter(entry -> entry.getValue() == targetCount) .map(entry -> entry.getKey()) .collect(Collectors.toList()); } }
内容的提问来源于stack exchange,提问作者user10181871
相关产品推荐
相关产品推荐

