【发布时间】:2018-12-23 01:01:01
【问题描述】:
我有一个表格集合列表
animals[0] = {'cat', 'cow', 'dog'}
animals[1] = {'cat', 'cow', 'pig'}
animals[2] = {'cat', 'dog', 'fish'}
animals[3] = {'tiger', 'fish', 'pig'}
animals[4] = {'dog', 'fish', 'pig'}
如何对至少有 2 个相似项目的集合进行分组?为简单起见,我将使用一个 dict,其键是重叠集的第一个元素,并且不关心属于该键的某些项目是否少于 2 个相似项目。例如,
g['cat'] = [0,1,2]
g['fish'] = [2,3,4]
因为列表 0 和 1 有重叠项 cat 和 cow,而列表 0 和 2 有重叠项 cat 和 dog。然而,列表 1 和 2 只有重叠项 cat 但仍包含在字典中。一个简单的蛮力方法是遍历整个列表并检查每个列表与其他列表。
for i,x in enumerate(animals):
for j,y in enumerate(animals):
intersection = x & y
if(len(intersection)>=2):
dict[list(intersection)[0]].append(j)
但是如果我有一个非常大的列表,我认为这非常耗时,所以我想学习一种更好的方法来做到这一点。如果有人有什么功能可以推荐。
【问题讨论】:
-
嗨!我们在谈论多大?如果这是一个市场篮子问题,我可以根据要处理的数据集的大小提出各种方法。
-
这里不应该
fish有[2,3,4]吗? -
这个问题有问题。动物[2] = {'cat', 'dog', 'fish'} 和 animals[4] = {'dog', 'fish', 'pig'} 有 2 个相同的项目,为什么鱼字典中没有 4 个?
-
@RoadRunner 和 Marcus.Aurelianus 是的,你是对的 :) 我在我的例子中忘记了这一点