0

Python の学習を始めたばかりで、この問題に行き詰まっています。DNA 配列があり、その相補配列を返す必要があります。たとえば、 がある場合ATTGCA、 が返されTAACGTます。これは、ATT、およびAで置き換えます。これは演習であり、文字列メソッドを使用することは想定されていません。今まで試したことはすべて、答えとして「T」を返します。最初の文字だけを認識して停止するようです。どうすればいいですか?CGGC

私は試した:

>>> def get_complementary_sequence(dna):
    for char in dna:
        if char == 'A':
            return 'T'
        elif char == 'T':
            return 'A'
        elif char == 'C':
            return 'G'
        elif char == 'G':
            return 'C'


>>> get_complementary_sequence('ATTGCA')
'T'

また、試しました:

def get_complementary_sequence(dna):
    sequence = ""
    for nucleotide in dna:
        if nucleotide == 'A':
            return sequence + 'T'
        elif nucleotide == 'T':
            return sequence + 'A'
        elif nucleotide == 'C':
            return sequence + 'G'
        elif nucleotide == 'G':
            return sequence + 'C'
        return sequence


>>> get_complementary_sequence('ATTGCA')
'T'
4

5 に答える 5

5

if辞書を試してみてください。そうすれば、 「」とelif「 」も必要ありません。

In [45]: dic={'A':'T','T':'A','C':'G','G':'C'}

In [46]: strs="ATTGCA"

In [47]: ''.join(dic[x] for x in strs)
Out[47]: 'TAACGT'

または使用map()

In [52]: ''.join(map(dic.get,strs))
Out[52]: 'TAACGT'
于 2012-10-18T20:13:57.867 に答える
3

文字列も一連の文字であるため、繰り返し処理できます。

for char in sequence:
于 2012-10-18T20:10:34.933 に答える
2

完全に文字列メソッドなしで、辞書を使用する別の方法:)

trans = {'A':'T','T':'A','C':'G','G':'C'}
with open("temp.txt", "w") as outfile:
    for character in mystring:
        outfile.write(trans[character])
with open("temp.txt") as infile:
    result = infile.read()
于 2012-10-18T20:38:18.180 に答える
2

これは、おそらく初心者にとってより理解しやすいAshwini Chaudharyのエレガントなソリューションに相当します。

complements = {'A': 'T',
               'T': 'A',
               'C': 'G',
               'G': 'C'}
dna_sequence = 'ATTGCA'
new_sequence = []
for char in dna_sequence:
    new_sequence.append(complements[char])
# new_sequence is now ['T', 'A', 'A', 'C', 'G', 'T']
result = ''.join(new_sequence) # result in 'TAACGT'
于 2012-10-18T20:21:19.517 に答える
1

このソリューションは理解しやすいです。それが役に立てば幸い。

def get_complement(nucleotide):
    """ (str) ->str
    """

    sequence = ""
    for char in nucleotide:
        if char == "A":
            sequence = sequence + "T"
        if char == "T":
            sequence = sequence + "A"
        if char == "G":
            sequence = sequence + "C"
        if char == "C":
            sequence = sequence + "G"

    return sequence
于 2013-09-12T05:52:11.050 に答える