实现接收列表、返回仅含重复元素新列表的get_repeated函数的最Pythonic方式?
实现get_repeated函数的最Pythonic方式
方法一:使用collections.Counter(推荐)
借助Python标准库中的Counter工具快速统计元素出现次数,再通过列表推导筛选出重复元素,写法简洁且效率拉满:
from collections import Counter def get_repeated(lst): return [item for item, count in Counter(lst).items() if count > 1]
测试示例:
list_a = ['a', 'b', 'c', 'c'] print(get_repeated(list_a)) # 输出: ['c']
Counter仅需遍历列表一次完成计数,整体时间复杂度为O(n),代码可读性极强,是最贴合Python风格的实现方式。
方法二:纯内置类型实现(无额外依赖)
如果不想导入外部模块,用两个集合分别记录已遍历元素和重复元素,同样能高效完成需求:
def get_repeated(lst): seen = set() repeated = set() for item in lst: if item in seen: repeated.add(item) else: seen.add(item) return list(repeated)
这种方法同样是O(n)时间复杂度,仅用Python内置的集合和列表类型,适合环境受限的场景。
注:以上两种方法返回的列表中,每个重复元素只会出现一次(即便原列表中重复多次),完全符合示例的预期行为。
内容的提问来源于stack exchange,提问作者user19843013
相关产品推荐
相关产品推荐

