在Python中优化特性

2024-05-15 12:47:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码需要在长列表上运行几个小时:

for elt in listCombinaisons_survivor:     
    effects = []
    for idBadge in elt:
        effects.append(dictBadges[idBadge]["Effect"])
    cpt = Counter(effects)
    for type_effect in cpt.keys():
        cpt_effect = cpt[type_effect]
        if cpt_effect > 3:
            listCombinaisons_survivor.remove(elt)
            break

我的listCombinaisons_survivor包含了57种可能性([1,2,3,5,6,7],[1,2,3,5,6,8]...)中6个徽章的所有可能组合。你知道吗

对于每个可能的组合,我在字典中选择与徽章ID匹配的“效果”(徽章ID 1=损坏),然后收集“效果”列表中的所有效果。你知道吗

然后我计算每种效果出现的次数,如果一个组合中有3个以上具有相同效果的徽章,我会删除这个组合。你知道吗

我有没有办法优化这个代码使它更快?你知道吗

我也试过了,但速度不快:

newlist_combinations = []
for elt in listCombinaisons_survivor:     
    effects = []
    for idBadge in elt:
        effects.append(dictBadges[idBadge]["Effect"])
    cpt = Counter(effects)
    for type_effect in cpt.keys():
        cpt_effect = cpt[type_effect]
        if cpt_effect > 3:
            break
    if not cpt_effect > 3:
        newlist_combinations.append(elt)

我不想知道要花多少时间,但我想知道如何优化这段代码。你知道吗

整个代码可以在那里找到:

https://github.com/yirkkiller/Python/blob/master/badgesRepartition-NEW.py

谢谢!你知道吗


Tags: 代码inforiftype徽章effectseffect
1条回答
网友
1楼 · 发布于 2024-05-15 12:47:34

除了非常不清楚的变量名之外,您的算法基本上可以归结为:

def filter_effects(listCombinaisons_survivor):
    for elt in listCombinaisons_survivor
        cpt = Counter(dictBadges[idBadge]["Effect"] for idBadge in elt)
        if all(value <= 3 for key, value in cpt.items()):
            yield elt

另外,如果我看一下您的完整脚本,我建议您首先学习Python的基础知识。有很多事情可以做得更清楚、更有力、更简单

我建议:

  • Python的旋风之旅(link
  • 流畅的Python(link
  • 大卫·鲍姆戈尔德的《像职业选手一样循环》

相关问题 更多 >