2017-02-18 3 views
1

dnaの補完的な逆変換はどうすればできますか?次の式は最初の文字列で機能しますが、2番目の文字列をリストに追加すると機能しません。リスト内の複数の文字列を逆順補完する方法

dna = ['CAG', 'AGT'] 

def reverse_complementary (char): 
    my_dictionary = {"A": "T", "C": "G", "G": "C", "T": "A"} 
    return "".join([my_dictionary[i] for i in reversed(char)]) 

print("reverse_complementary =" , reverse_complementary(dna)) 
+1

期待どおりの出力を提供してください。 – ShadowRanger

+2

もともと 'list 'ではなく' CAG'という文字列で実行しましたか?それがあなたの問題だろう。 – ShadowRanger

+0

このdna = ['CAG'、 'AGT']で実行します – Saram

答えて

2

あなたはreverse_complementarystrを渡すと、それはあなたが望むものである、逆と 文字を変換します。

あなたがliststrのオブジェクトを渡す場合は、ここでやっているように、それは dictで各strを検索してみてください、その後、listを逆にし、失敗します ます。

修正方法?それはあなたが単一のDNA シークエンスまたはそれらのリストを渡すかどうかによって異なります。前者はより一般的なようですので、私は と一緒に行くでしょう。

reverse_complementaryはすでに文字列を使用していますので、それは変わらないのです。 我々は異なり、それを呼び出す必要があります:

dna = ['CAG', 'AGT'] 

for s in dna: 
    print("reverse_complementary =" , reverse_complementary(s)) 

編集:リストとして結果を印刷する方法について説明します。

ループ付き

list comprehension

lst = [] 
for s in dna: 
    lst.append(reverse_complementary(s)) 
print("reverse_complementary =" , lst) 

:あなたはseperatlyあなたの文字列のそれぞれ(とないリスト自体)に変換を実行する必要が

lst = [reverse_complementary(s) for s in dna] 
print("reverse_complementary =" , lst) 
+0

結果をこのコードで一覧表示するにはどうすればよいですか? – Saram

+0

これを行うには2通りの方法があります。 –

0

、これを行うことができますループを使用して、またはmapを使用して明示的なリスト理解を使用するか、明示的なリスト理解を使用して指定します。

def reverse_complementary(char): 
    my_dictionary = {"A": "T", "C": "G", "G": "C", "T": "A"} 
    return ["".join([my_dictionary[i] for i in reversed(seq)]) for seq in char] 

あなたが他の文字に文字をマップするときしかし、それはstr.maketransstr.translateを使用することが一般的に良いでしょう:

to_complement = str.maketrans({"A": "T", "C": "G", "G": "C", "T": "A"}) 

def reverse_complementary(char): 
    return [seq[::-1].translate(to_complement) for seq in char] 

[::-1]は、文字列を逆に別の(また、より効率的)な方法です。

+0

しかし、このコードは補完的な逆を与えません。ちょうど逆です – Saram

+0

@Saram私は 'reverse_complementary(['AAT'])'(これらの関数のいずれかを使用して) '# 'ATT']'私はそれが逆転するとは思わない。 – MSeifert

関連する問題