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

如何更高效地根据关联列表的对应元素对目标列表进行分组排序?

冗余代码的优化思路与实现

首先梳理原实现的核心冗余点:

  • 把5组“高度值-列表索引”的对应关系分散写在多组if判断中,每新增一个测试高度,就要同步修改初始化的空列表长度、新增对应判断分支,维护成本高
  • 手动维护counter游标同步遍历heightsTotal和timesTotal,忽略了两个列表是一一对应平行序列的前提,增加了无意义的游标管理逻辑
  • 逐样本跑多组条件判断的运行效率偏低,样本量越大时判断开销越明显

方案1:兼容原有输出的简化实现

完全保持原有输出结构不变,抽离硬编码的映射关系,去掉手动计数器:

# 统一维护高度和嵌套列表索引的对应关系,仅需配置一次
height_index_map = {0.2: 0, 0.4: 1, 0.6: 2, 0.8: 3, 1: 4}
# 用列表推导式初始化等长的空嵌套列表,比手动写5个[]更规整
timesAfterHeight = [[] for _ in range(len(height_index_map))]
# 直接通过zip遍历两个平行列表,完全不需要手动计数
for h, t in zip(heightsTotal, timesTotal):
    timesAfterHeight[height_index_map[h]].append(t)

该方案和原代码的运行逻辑、输出结果完全一致,但代码量压缩近60%,没有冗余的分支判断,可维护性大幅提升。

方案2:高扩展性的通用实现

如果后续会新增更多测试高度,无需每次调整映射关系和初始化长度,用哈希分组逻辑自动归类即可:

from collections import defaultdict

# 自动按下落高度做样本分组,无需提前预知所有高度值
height_group = defaultdict(list)
for h, t in zip(heightsTotal, timesTotal):
    height_group[h].append(t)

# 如需保持原有的固定顺序输出,仅需配置需要展示的高度顺序列表即可
target_height_order = [0.2, 0.4, 0.6, 0.8, 1.0]
timesAfterHeight = [height_group[h] for h in target_height_order]

该方案的优势:

  • 不需要提前硬编码初始化固定长度的嵌套列表
  • 不需要写任何条件判断匹配样本对应的分组位置
  • 新增测试高度时,仅需调整target_height_order的配置,核心遍历逻辑零修改
  • 运行效率优于原代码:字典/哈希结构的查找为O(1)复杂度,无逐分支判断的额外开销,大样本量下效率优势更显著

效率对比

原代码的时间复杂度为O(n*k),其中n为总测试样本数,k为固定的判断分支数(当前场景下k=5),样本越多、高度分支越多,重复判断的开销越大;
优化后方案的时间复杂度为O(n),每个样本仅需一次哈希查找,无冗余分支,运行效率更高。

内容的提问来源于stack exchange,提问作者Aurum-197

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 20:54:03