Я недавно нашел itertools.combinations()
, проблема в том, что у меня есть большое количество предметов для этой игры, 228, с комбинациями до 6. Это оставляет мне 182587922160 уникальных комбинаций. У меня есть функция фильтрации по статистике, которую я хочу увеличить, но у меня все еще остается 75 и 201359550 комбинаций.
В настоящее время я использую такую функцию:
item_combinations = \
list( filter( self.is_valid,
itertools.combinations( self.filter_items( self.player,
self.items
),
6
)
)
)
....
def filter_items(self, player, items):
tier_3_items = filter_json(items, "tier", 3)
items_by_type = filter_json(tier_3_items, "type", player["powerType"])
return items_by_type
def is_valid(self, item_set):
# stats is a dict structured like:
# { "mana": 0, "health": 0, "attackSpeed": 0, ... etc }
# attribute_goals is structured the same but with values I'm trying to reach.
stats = self.stats.copy()
for item in item_set:
for key in [x for x in item if x in stats]:
stats[key] += item[key]
if all(int(stats[x]) >= int(self.attribute_goals[x]) for x in stats):
return True
return False
А данные, с которыми я работаю, извлекаются из JSON -файла, структура которого выглядит следующим образом:
[ { 'name': 'Shuriken',
'id': 1290,
'type': 'Physical',
'tier': 1,
'childItemId': 1289,
'attackSpeed': 10,
'criticalChance': 10
},
{ etc ...,
},
...
]
Есть ли лучший способ сделать это или любой другой способ ускорить генерацию комбинаций