2017-12-07 18 views
1

ウイルスはヌクレオチド列であると考えられ、関数は同じ量のヌクレオチドからなる文字列を返さなければなりませんが、1つは変更されます。文字列中のランダム値をランダム値に置き換えます。

def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    virus.split 
    random.randrange(1, stop=len(virus), step=1) = random.choice(mutations) 

ので、ウイルスが、私はこれについて行くことができる方法、それはATCCまたはGTCGのようなものを返す必要がありますATCGされている場合たとえば、私はリストにウイルスを作る、とのランダムでそれにランダム変数を置き換えてみました私の可能性のある変異リスト。

これはおそらく文字列ウイルスからリストを作成し、突然変異を行い、リストを文字列に戻して文字列を返すべきです。

+0

変更することになっているどのように多くの手紙?これもランダムですか? – scharette

+0

これが遺伝的アルゴリズムの一部であり、何度も繰り返される場合は、文字列の代わりにリストを使うことを検討してください。 – ayhan

答えて

0

あなたがランダム値で置き換えるために、ランダムなインデックスを生成することができます

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    i = random.randint(0, len(virus)-1) 
    val = random.choice(mutations) 
    return ''.join(val if c == i else a for c, a in enumerate(virus)) 
+0

明示的なループの代わりに範囲/スライスの構文を使用することはありますか? 'ウイルス[:i] + val +ウイルス[1 + i:]' – user268396

1

あなたはSTHを行うことができます。次のように:

def mutate(virus): 
    # choose random index to change 
    index = random.randint(0, len(virus) - 1) 

    # make sure you are not using the previous char by removing it from 
    # the mutations to choose from 
    mutations = [c for c in 'ATCG' if c != virus[index]] 

    # swap out the char at index with a random mutation 
    return virus[:index] + random.choice(mutations) + virus[index+1:] 
+0

ちょっと男、私にもインデックスを変更し、今それは動作します!私はあなたを愛しています、あなたのコードを少し説明できますか?私はあなたがリストのスライスを使用して参照してください。 –

+0

@RubenWeijersいいえ、それは文字列のスライスです。 – schwobaseggl

0

あなたはこのような何かを行うことができます。文字列以来

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    r = random.randint(0, len(virus)-1) 
    virus = list(virus) 
    virus[r] = random.choice(mutations) 
    return ''.join(virus) 
0

は不変で、私は、リストの代わりに、文字列での作業をお勧めします。私の意見では可読性も向上します。

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    virus = list(virus) 
    virus[random.randint(0, len(virus)-1)] = random.choice(mutations) 
    return "".join(virus) 

出力

>>> print(mutate('ATCG')) 
ATCT 

>>> print(mutate('ATCG')) 
ATTG 

>>> print(mutate('ATCG')) 
ATCC 
関連する問題