理論

理論

2つの列を持つスペースまたはカンマ区切りのテーブルがあり、各行は2つの単語の同等性を表します。

A B  
B C  
B D  
C E  
F G

私が望むのは、互いに等しいすべての単語をリストする各行を持つテーブルです。

A B C D E  
F G 

つまり、両方の単語が同じ入力行に表示される場合は、最終的に同じ出力行に表示される必要があります。

どんなツールでも可能です。

ベストアンサー1

Pythonは入力ファイルを引数で始めます。

import sys

res = []  # list of lists
for line in open(sys.argv[1]):
    try:
        x, y = line.split()  # split on space
    except ValueError:
        line = line.rstrip()
        x, y = line.split(',')  # retry with comma
    for l in res:
        if x in l:
            if y not in l:
                l.append(y)
            break
    else:
        res.append([x, y])

for line in res:
    print ' '.join(line)

テストでは、if y not in l:同じ値を2回追加することをスキップします。これが必要かどうか、ソースにそのような例外があるかどうかはわかりません。テストを省略して常に実行できますl.append(y)

コードは最初にスペースに分割し、次にコンマを再試行します。これは、カンマで区切られた行にスペースがないと仮定します(つまりスペースではないA, B)。

ネストされたforループは(私が知る限り)Pythonの機能を使用します。つまり、breakステートメントではなく、elseループがExhaustionを介して終了したときにのみ実行されます。forつまりx、見つからない場合は、そのペアが新しいリストとして追加されますres

おすすめ記事