2016-04-18 21 views
-4

私は、グラフの端を表すリストをPythonで持っているので、最初のリストの2番目の値が次のリストの最初の値と同じになるように並べ替える必要があります。たとえば、私は、このリストがあります:リストのリストを並べ替える

[('AT', 'TG'), ('GT', 'TG'), ('TG', 'GG'), ('GG', 'GC'), ('GC', 'CG'), ('CG', 'GT'), ('GC', 'CA'), ('TG', 'GC'), ('CA', 'AA'), ('AA', 'AT')] 

をそして私は、リストは次のようになるように順序を変更したい:

[('AT', 'TG'), ('TG', 'GG'), ('GG', 'GC'), ('GC', 'CG'), ('CG', 'GT'), ('GT', 'TG'), ('TG', 'GC'), ('GC', 'CA'), ('CA', 'AA'), ('AA', 'AT')] 

はどのように私はそれを行うことができますか?

+6

あなたを妨害していることはありますか? – Maroun

+0

まあ、私はどのように推測するのかわからないという事実 – Hai

+0

あなたの質問が広すぎるので、最小限の試行をしてください。 – Maroun

答えて

1

おそらくこれが役に立ちます。これは、すべての可能な "順序" を出力します。

from collections import defaultdict 

l = [('AT', 'TG'), ('GT', 'TG'), ('TG', 'GG'), ('GG', 'GC'), ('GC', 'CG'), ('CG', 'GT'), ('GC', 'CA'), ('TG', 'GC'), ('CA', 'AA'), ('AA', 'AT')] 

lookup = defaultdict(set) 
for k, v in l: 
    lookup[k].add(v) 

def sort(l, s): 
    k = l[-1][1] 
    pairs = set([(k, v) for v in lookup[k]]) - s 
    if len(pairs) == 0: 
     return [l] 
    results = set() 
    for k, v in pairs: 
     results.update(sort(l + ((k, v),), s | set([(k, v)]))) 
    return results 

results = sort((('AT', 'TG'),), set([('AT', 'TG')])) 

for result in results: 
    print list(result) 

出力:

[( 'AT'、 'TG')、( 'TG'、 'GG')、( 'GG'、 ' 「GC」、「CG」、「CG」、「GT」、「GT」、「TG」、「TG」、「GC」)、(「GC」、 ('A '、' TG ')、(' TG '、' GC ')、(' CA ')、(' CA '、' AA ' ( 'TG'、 'TG'、 'TG'、 'TG'、 ''、 ''、 ''、 ''、 ''、 '') GC、GG、TG、GG、TG、GG、GG、GG、GG、GG、GG、 GC ')、(' GC '、' C ( 'AT'、 'TG')、( 'TG'、 'GG')、( 'A'、 'A')、( 'CA'、 'AA'

+0

はい、それはたくさんの助けになります、ありがとうございます! – Hai

関連する問題