2016-03-27 4 views
1

私は突然変異プロセスをシミュレートしようとすると、遺伝的アルゴリズムを足すながら、私は、この問題を持っている: 1.私は遺伝子が形式であるランダムposition = randint(0, len(genes)-1)
「10101」を選択して、1と0がランダムに 2に設定されている私がしよう1または0を0または1に置き換えて突然変異をシミュレートすると、多くのエラーが発生します。文字列中の文字をPythonでの位置を知るように変更するにはどうすればよいですか?

position = randint(0, len(genes)-1) 
if(genes[position]=="1"): 
    genes[position] = "0" 
if(genes[position]=="0"): 
    genes[position] = "1" 

動作しません:

私はこの方法を試してみました。 私はまた試してみました:

if(genes[position_to_mutate]=="1"): 
genes_new = "" 
    if(position_to_mutate == 0): 
     genes_new = "0" + genes[1:len(genes)] 
     print "genes z zerowym nowym : ", genes 
    if(position_to_mutate!=0): 
     genes_new = genes[0:position_to_mutate] + "0" + genes[position_to_mutate+1:len(genes)] 
    if(position_to_mutate==4): 
     genes_new = genes[0:len(genes)-2] + "0" 

だから、どのように私は他の文字列内のその位置によって、それを取得して1つの記号を置き換えますか?

+0

どのように '遺伝子 'を定義していますか?どのようなエラーがスローされていますか? –

+1

文字列に代入を使用することはできないので、 'genes [position]'などはエラーで失敗するでしょう。 –

答えて

1

文字列を再割り当てする必要があり、このような何かを行うことができ、不変である:他の人が指摘したように

genes = "101010101" 
position = randint(0, len(genes)-1) 
new_val = "1" if genes[position] == "0" else "0" 
genes = genes[:position] + new_val + genes[position+1:] 
+1

'else" 0を返すようにします。 –

1

Pythonの文字列は無制限です。

変更のために新しいインスタンスを作成する必要があります。

また、listを使用して、変更後にstrに変換して戻すこともできます。

>>> mystr = '1001' 
>>> tmp = list(mystr) 
>>> tmp[0] = '0' 
>>> mystr = ''.join(tmp) 
>>> mystr 
'0001' 
0

私はあなたが割り当てを使用することはできませんので、文字列は不変でコメントとして、あなたはbytearrayで文字列を格納し、終了したら、次にばかりのByteArrayから戻って新しい文字列を取得するためのByteArrayにSTRを呼び出すことを変異させることができ変更:

In [42]: s = "10101" 

In [43]: b_s = bytearray(s) 

In [44]: b_s[0] = "0" 

In [45]: str(b_s) 
Out[45]: '00101' 

In [46]: b_s[0:2] = "11" 

In [47]: str(b_s) 
Out[47]: '11101' 

すべての変更を行い、新しい文字列を継続的に作成するのではなく、文字列を元に戻すと効率が上がります。

0

、文字列は不変です。ただし、スライス演算子の細部を使ってバージョンを短くすることができます:

genes_new = genes[:p] + "0" + genes[p+1:] 

# another way is to use this kind of generator expression 
''.join(x[i] if i != p else '0' for i in xrange(len(x))) 
+0

複雑に見えますが、うまく動作します.joinは便利です! –

関連する問題