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. 1あるまたはその中にあるクラスターはすでにあります10か?-いいえ、両方を含む新しいものを作成します。現在、次のものがあります[[1, 10]]
  2. 1あるまたはその中にあるクラスターはすでにあります20か?-はい、試合に追加します。現在、次のものがあります[[1, 10, 20]]
  3. 3あるまたはその中にあるクラスターはすでにあります6か?-いいえ、両方を含む新しいものを作成します。現在、次のものがあります[[1, 10, 20], [3, 6]]
  4. 3あるまたはその中にあるクラスターはすでにあります10か?-はい、試合に追加します。現在、次のものがあります[[1, 3, 10, 20], [3, 6]]

問題は、に追加[3, 10]した後[1, 10]、が存在しない既存のクラスターが3すでに存在するかどうかをチェックしないこと10です。あなたはそれをあなたのコードに追加する必要があり、それはうまくいくでしょう。

于 2013-01-19T16:02:23.090 に答える