如何更高效统计列表中指定元素的出现次数?
优化方案
你的代码功能正常,但存在三次遍历列表的问题,当ipaddresses规模较大时会浪费性能。下面是两种更优的实现方式:
方式一:单次遍历手动计数
这种方式只遍历列表一次,时间复杂度为O(n),无需额外导入模块,性能最优:
def question10(ipaddresses: list[str | None]): none_count = host_count = target_count = 0 for x in ipaddresses: if x is None: none_count += 1 elif x == '129.128.1.1': host_count += 1 elif x == '192.128.1.4': target_count += 1 return [none_count, host_count, target_count]
注:更新了类型注解为list[str | None],更贴合实际处理的元素类型
方式二:使用collections.Counter
借助标准库的Counter可以简化代码,扩展性更强——如果后续需要统计更多IP,只需在结果列表中新增count.get(目标值, 0)即可:
from collections import Counter def question10(ipaddresses: list[str | None]): count = Counter(ipaddresses) return [ count.get(None, 0), count.get('129.128.1.1', 0), count.get('192.128.1.4', 0) ]
两种方案对比:
- 手动计数:无额外依赖,执行效率略高(避免了Counter内部的哈希表操作)
- Counter实现:代码更简洁,维护成本低,适合需要扩展统计项的场景
内容的提问来源于stack exchange,提问作者stuupid
相关产品推荐
相关产品推荐

