#定义合并函数:将有共同核心点的临时聚类簇合并
test_list_set = [{1,2,3},{3,4,5},{10,12,13},{4,5,8},{13,15},{7,8},{20,22}] result = [] for index, t0 in enumerate(test_list_set): print(t0) group = set() for index, t1 in enumerate(test_list_set[index-1:]): if t0 & t1: group = group | t0 | t1 if (not result) and group: result.append(group) else: for index,r in enumerate(result): flag = 0 if r & group: result[index] = group|r flag = 1 break if (not flag) and group: result.append(group)
#定义合并函数:将有共同核心点的临时聚类簇合并 def mergeSets(list_set): result = [] while len(list_set)>0 : cur_set = list_set.pop(0) intersect_idxs = [i for i in list(range(len(list_set)-1,-1,-1)) if cur_set&list_set[i]] while intersect_idxs : for idx in intersect_idxs: cur_set = cur_set|list_set[idx] for idx in intersect_idxs: list_set.pop(idx) intersect_idxs = [i for i in list(range(len(list_set)-1,-1,-1)) if cur_set&list_set[i]] result = result+[cur_set] return result # 测试mergeSets效果 test_list_set = [{1,2,3},{3,4,5},{10,12,13},{4,5,8},{13,15},{7,8},{20,22}] print(mergeSets(test_list_set))
[{1, 2, 3, 4, 5, 7, 8}, {10, 12, 13, 15}, {20, 22}]