5

csv ファイルにペアの値があります。ペアになった値はどちらも一意である必要はありません。さらなる分析のために、この大きなリストを独立した完全なセットに分割したいと思います。

説明すると、私の「メガリスト」は次のようになります。

megalist = [['a', 'b'], ['a', 'd'], ['b', 'd'],['b', 'f'], ['r', 's'], ['t', 'r']...]

最も重要なことは、出力が対になった値のリストを保持することです (つまり、値を統合しません)。理想的には、出力は、後で個別に分析するために最終的に異なる csv ファイルになります。たとえば、このメガリストは次のようになります。

completeset1 = [['a', 'b'], ['a', 'd'], ['b', 'd'], ['b', 'f']]
completeset2 = [['r', 's'], ['t', 'r']]
...

グラフ理論のコンテキストでは、相互に排他的なサブグラフ (ペアの値が接続された頂点である) の巨大なグラフを取得し、それらをより管理しやすい独立したグラフに分割しようとしています。ご意見ありがとうございます。

編集 1: これにより、私は前進できる場所に置かれました。再度、感謝します!

import sys, csv
import networkx as nx

megalist = csv.reader(open('megalistfile.csv'), delimiter = '\t')

G = nx.Graph()
G.add_edges_from(megalist)

subgraphs = nx.connected_components(G)

output_file = open('subgraphs.txt','w')

for subgraph in subgraphs:
     output_line = str(G.edges(subgraph)) + '\n'
     output_file.write(output_line)

output_file.close()
4

3 に答える 3

6

これにはnetworkxを使用できます。グラフの作成:

>>> import networkx as nx
>>> megalist = [['a', 'b'], ['a', 'd'], ['b', 'd'],['b', 'f'], ['r', 's'], ['t', 'r']]
>>> G = nx.Graph()
>>> G.add_edges_from(megalist)

次に、サブグラフのリストを取得します。

>>> subgraphs = nx.connected_components(G)
>>> subgraphs
[['a', 'b', 'd', 'f'], ['s', 'r', 't']]
>>> [G.edges(subgraph) for subgraph in subgraphs]
[[('a', 'b'), ('a', 'd'), ('b', 'd'), ('b', 'f')], [('s', 'r'), ('r', 't')]]
于 2012-09-07T15:21:47.473 に答える
0

Counter http://docs.python.org/library/collections.html#collections.Counterを使用した非常に単純なアルゴ

from collections import Counter

megalist = [['a', 'b'], ['a', 'd'], ['b', 'd'],['b', 'f'], ['r', 's'], ['t', 'r']]

result = []
for l in megalist:
    cl = Counter(l)
    if not result:
        result.append([l])
    else:
        add = False
        for result_item in result:
            add = bool(filter(lambda e: bool(cl & Counter(e)) , result_item))

            if add and l not in result_item:
                result_item.append(l)
                break                    

        if not add:
            result.append([l])


print result

[[['a', 'b'], ['a', 'd'], ['b', 'd'], ['b', 'f']], [['r', 's'], ['t', 'r']]]
于 2012-09-07T16:04:24.957 に答える
-2

スライスを使用してサブリストを手動で定義できます。

completeset1=megalist[0:4]
completeset2=megalist[4:]

ただし、実際には、より深いロジックを適用するか、追加のデータを使用して、条件に応じてこれらのセグメントを自動的に作成したいようです。適用したいロジックについて詳しく知らずにアドバイスするのは難しいです。

編集:質問へのコメントは良いポインタかもしれません。

于 2012-09-07T15:21:26.973 に答える