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

Python功能优化:长列表遍历代码性能提升需求

优化长列表处理代码的高效方案

嘿,我帮你看看这段代码的优化空间!首先得说,你现在的问题核心在于遍历列表时直接修改它,加上不必要的全量统计,导致效率极低——毕竟57选6的组合数超过360万,每一步低效操作都会被放大无数倍。

原代码的核心问题

  • 遍历中修改列表的致命问题:你在遍历listCombinaisons_survivor时调用remove(elt),这会触发列表的元素前移操作(O(n)复杂度),而且会导致后续遍历跳过部分元素,既慢又可能引入逻辑错误。
  • 冗余的全量统计:每次都用Counter统计所有6个元素的效果次数,但其实只要发现任意一种效果超过3次,就可以直接判定这个组合无效,没必要统计完所有元素。

优化后的代码方案

先给你最直接的优化版本,针对已生成的组合列表:

from collections import defaultdict

# 预先提取徽章ID到效果的映射(让代码更清晰,查询效率和原代码一致)
badge_effect_map = {bid: details["Effect"] for bid, details in dictBadges.items()}

filtered_combinations = []
for combo in listCombinaisons_survivor:
    effect_counts = defaultdict(int)
    is_valid = True
    for bid in combo:
        effect = badge_effect_map[bid]
        effect_counts[effect] += 1
        # 一旦发现某个效果次数超过3,立刻终止当前组合的统计
        if effect_counts[effect] > 3:
            is_valid = False
            break
    if is_valid:
        filtered_combinations.append(combo)

# 替换原列表
listCombinaisons_survivor = filtered_combinations

如果你的listCombinaisons_survivor是预先用itertools.combinations生成的,那可以更进一步,边生成边筛选,避免一次性把360多万个组合加载到内存里,内存和速度都会更优:

import itertools
from collections import defaultdict

# 假设dictBadges的键就是徽章ID
badge_ids = list(dictBadges.keys())
badge_effect_map = {bid: details["Effect"] for bid, details in dictBadges.items()}

listCombinaisons_survivor = []
for combo in itertools.combinations(badge_ids, 6):
    effect_counts = defaultdict(int)
    is_valid = True
    for bid in combo:
        effect = badge_effect_map[bid]
        effect_counts[effect] += 1
        if effect_counts[effect] > 3:
            is_valid = False
            break
    if is_valid:
        listCombinaisons_survivor.append(combo)

优化逻辑说明

  1. 移除遍历中修改列表的操作:用新列表存储符合条件的组合,只遍历原列表一次,时间复杂度从O(n²)降到O(n*6)(每个组合固定6个元素)。
  2. 提前终止统计:一旦发现某个效果次数超过3,立刻停止当前组合的后续元素统计,节省大量不必要的计算。
  3. 内存优化(可选):边生成边筛选的方式,不需要预先存储所有组合,内存占用会大幅降低,尤其适合处理超大规模组合场景。

内容的提问来源于stack exchange,提问作者Lory Michel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:31:43