我对Python和编码非常陌生,有一个像这样的群集对的列表
[[1,2],[3,4],[2,3],[4,5]......],
我已编写此代码以将群集对加入更大群集的列表中。
for i in range (len(Clist)):
for j in range(i+1,len(Clist)):
for disk in Clist[i]:
if disk in Clist[j]:
joined=joincluster(Clist[i], Clist[j])
Clist[i]=list(set(joined))
Clist[j]=[]
break
我接着把那些空的拿走了。 但是,当我有超过30个左右的集群对时,它并没有加入所有对,一些本应加入的集群尚未加入。我看不出我哪里错了?我可以找出问题吗?
[[0, 2], [0, 9], [1, 10], [2, 0], [2, 9], [3, 6], [3, 10], [3, 11], [4, 5], [4, 7], [4, 12], [4, 14], [5, 4], [5, 8], [5, 12], [5, 14], [6, 3], [6, 10], [6, 11], [7, 4], [7, 12], [8, 5], [8, 14], [9, 0], [9, 2], [9, 13], [10, 1], [10, 3], [10, 6], [10, 11], [11, 3], [11, 6], [11, 10], [12, 4], [12, 5], [12, 7], [13, 9], [14, 4], [14, 5], [14, 8]]
对不起,问题只发生在我有相当多的配对时。 这就是我得到的
[[0, 9, 2, 13], [11, 1, 10, 3, 6], [3, 6], [4, 5, 7, 8, 12, 14]]
所以3,6应该已合并,但事实并非如此。
答案 0 :(得分:1)
让我们举一个更简单的例子,只有4个这样的集群:
clusters = [ [1, 10], [1, 20], [3, 6], [3, 10] ]
这4个足以说明为什么[3, 6]
与所有其他群集分离。从第一个到最后一个循环遍历这些集群。这是发生的事情:
1
或10
的群集? - 不,创建一个包括两者的新的。我们现在有以下内容:[[1, 10]]
。1
或20
的群集? - 是的,附加到比赛中。我们现在有以下内容:[[1, 10, 20]]
。3
或6
的群集? - 不,创建一个包括两者的新的。我们现在有以下内容:[[1, 10, 20], [3, 6]]
。3
或10
的群集? - 是的,附加到比赛中。我们现在有以下内容:[[1, 3, 10, 20], [3, 6]]
。问题是:在将[3, 10]
追加到[1, 10]
之后,它不会检查现有的群集是否已包含3
,但没有10
{{1}} }。您需要将其添加到您的代码中,它才能正常工作。