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
。