You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按条件统计对象数组元素的最优方法及列表推导式用法

对象数组多条件统计性能优化方案

现有实现的性能问题

你当前使用三次独立列表推导的写法,存在两个明显的性能损耗点:

  • 会对整个数组完成3次全量遍历,时间复杂度为O(3n)
  • 每次筛选都会生成实际存储符合条件元素的列表对象,产生不必要的内存开销
    数据量达到上万条时,这些损耗会被放大,完全有优化空间。

最优优化方案

核心思路是仅做1次全量遍历,遍历过程中直接完成计数累加,不生成多余的中间列表,时间复杂度直接降到O(n),性能比原有实现提升2倍以上。

固定统计维度的简单写法

如果只需要统计viw、edit、crt三类固定值,直接写分支判断累加即可:

view_count = 0
edit_count = 0
crt_count = 0

for item in user_record:
    item_type = item["type"]
    if item_type == "viw":
        view_count += 1
    elif item_type == "edit":
        edit_count += 1
    elif item_type == "crt":
        crt_count += 1

可扩展的字典计数写法

如果后续可能新增其他统计类型,推荐用字典做计数器,不用修改遍历逻辑就能适配新类型,性能和手动写分支几乎一致:

from collections import defaultdict

count_dict = defaultdict(int)
for item in user_record:
    count_dict[item["type"]] += 1

# 需要取值时直接从字典取即可,不存在的类型默认返回0
view_count = count_dict["viw"]
edit_count = count_dict["edit"]
crt_count = count_dict["crt"]

关于列表推导式使用OR条件的说明

列表推导式的if判断完全支持OR逻辑,直接使用or关键字拼接条件即可,示例:

# 筛选所有type为viw或edit的元素
target_list = [item for item in user_record if item["type"] == "viw" or item["type"] == "edit"]

注意:这种写法仅适合筛选单组合并条件的场景,如果用来做多维度分别计数,依然会产生多次遍历的额外开销,不适合当前的统计需求。

内容的提问来源于stack exchange,提问作者back-new

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:51:27