想象一下,大约有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)