0

だから私はDNA配列ファイルを持っています.私の目標は、配列内の5つのヌクレオチドをランダムに文字Mに置き換えることです.

すなわち。dna1.txt にはシーケンス ACTGGCTACATTG があります。

私は ACTGGCTACATTG を ACMMGCMMCATMG のようなものにしたいと思っています。

一度に 1 文字ずつ置換する方法は知っていますが、複数の文字は置換できません。

dna1 = open ("dna1.txt","r")
data1 = dna1.read()

from random import randint, choice

def Mutated_DNA(data1):
    dna_list = list(data1)
    mutation_site = randint(0, len(dna_list)-1)
    dna_list[mutation_site] = choice(list('M'))        
    return ''.join(dna_list) 

print (Mutated_DNA(data1))

私は何をすべきか?

4

1 に答える 1

1

正確に5 文字を新しいものに置き換えたい場合、最も簡単な方法は、可能な位置からサンプリングして、それらを正確に変更することだと思います。例えば:

from random import sample

def mutate(s, num, target):
    change_locs = set(sample(range(len(s)), num))
    changed = (target if i in change_locs else c for i,c in enumerate(s))
    return ''.join(changed)

例えば

>>> mutate('ABC', 2, 'M')
'MMC'
>>> mutate('ABC', 2, 'M')
'AMM'
>>> mutate('ABC', 2, 'M')
'MMC'
>>> mutate('ABC', 2, 'M')
'MBM'

また

def mutate(s, num, target):
    change_locs = sample(range(len(s)), num)
    new_s = list(s)
    for change_loc in change_locs:
        new_s[change_loc] = target
    return ''.join(new_s)

于 2013-04-09T19:53:31.303 に答える