11

DNA 配列があり、Python を使用して逆補数を取得したいと考えています。これは CSV ファイルの列の 1 つにあり、同じファイルの別の列に逆補数を書きたいと思います。トリッキーな部分は、A、T、G、および C 以外のセルがいくつかあることです。次のコードで逆補数を得ることができました。

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    bases = [complement[base] for base in bases] 
    return ''.join(bases)
    def reverse_complement(s):
        return complement(s[::-1])

    print "Reverse Complement:"
    print(reverse_complement("TCGGGCCC"))

ただし、次のコードを使用して、補数辞書に存在しない項目を見つけようとすると、最後のベースの補数が得られます。反復しません。どうすれば修正できるか知りたいです。

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    for element in bases:
        if element not in complement:
            print element  
        letters = [complement[base] for base in element] 
        return ''.join(letters)
def reverse_complement(seq):
    return complement(seq[::-1])

print "Reverse Complement:"
print(reverse_complement("TCGGGCCCCX"))
4

9 に答える 9

20

一般に、ジェネレータ式は元のコードよりも単純であり、余分なリスト オブジェクトの作成を回避します。複数の文字を挿入できる場合は、他の回答と一緒に行ってください。

complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
seq = "TCGGGCCC"
reverse_complement = "".join(complement.get(base, base) for base in reversed(seq))
于 2014-08-07T18:04:43.203 に答える
14
import string
old_chars = "ACGT"
replace_chars = "TGCA"
tab = string.maketrans(old_chars,replace_chars)
print "AAAACCCGGT".translate(tab)[::-1]

それはあなたに逆の賛辞を与えるでしょう= ACCGGGTTTT

于 2014-10-28T18:35:26.803 に答える