Представьте, что существует около 200 групповых пресетов.К каждой группе прикреплено X номеров «предметов».Группа может иметь один элемент или 100 элементов.Группы часто имеют элементы с общими именами, т.е.Group_0040 может иметь item_abcde, item_bcda, item_bcba и Group_0120 может иметь общий item_abcd, но 10 других, которые не используются совместно с Group_0040.
Какой самый эффективный способ сортировки списков X # В группах больше всего элементовобщего?Я полагаю, в идеале, в конце концов, данные, которые было бы полезно вернуть, были бы:
- Сортировано из МОСТ общего с наименьшим общим
- Список групп, в которых есть эти элементыобщие
- Имена элементов.
, то есть наиболее общие могут выглядеть следующим образом:
[{'groups': [<Group_0040>, <Group_0041>, <Group_0022, <Group_0076>, <Group_0054>, <Group_0192>, <Group_0017>],
'items': [<Item_acdb>, <Item_ddbc>, <Item_dddb>, <Item_cbcb>, <Item_acba>, <Item_aaba>]
}
....
]
Сбор этих данных также будет иметь значения отсечения - т.е.должно быть X общих групп, и должно быть X общих элементов, чтобы их можно было рассмотреть.т.е.:
getSharedItemGroups (minGroups = 4, minItems = 5)
Пример:
class Group(object):
def __init__(self, name):
self.name = name
self.items = []
def addItem(self, item):
self.items.append(item)
class Item(object):
def __init__(self, name):
self.name = name
import random
import string
groups = []
for x in range(200):
groups.append(Group('Group_{0:04d}'.format(x)))
letters = string.lowercase
for group in groups:
for i in range(random.randint(0,50)):
tag = ''
for c in range(4):
tag += letters[random.randint(4)]
group.addItem(Item('item_' + tag)