0

可能重复:
我想根据相似的属性对元组进行分组

我对 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 应该已经合并但它没有。

4

1 回答 1

1

让我们举一个更简单的例子,只有 4 个这样的集群:

clusters = [ [1, 10], [1, 20], [3, 6], [3, 10] ]

这 4 个足以说明为什么[3, 6]会与所有其他集群分开。您从第一个到最后一个循环遍历这些集群。这是发生的事情:

  1. 是否已经有一个集群拥有110在其中?- 不,创建一个新的,包括两者。我们现在有以下内容:[[1, 10]].
  2. 是否已经有一个集群拥有120在其中?- 是的,追加到比赛中。我们现在有以下内容:[[1, 10, 20]].
  3. 是否已经有一个集群拥有36在其中?- 不,创建一个新的,包括两者。我们现在有以下内容:[[1, 10, 20], [3, 6]].
  4. 是否已经有一个集群拥有310在其中?- 是的,追加到比赛中。我们现在有以下内容:[[1, 3, 10, 20], [3, 6]].

问题是:在附加[3, 10]到之后[1, 10],它不会检查是否已经存在现有的集群3,而没有10. 您需要将其添加到您的代码中,它会正常工作。

于 2013-01-19T16:02:23.090 回答