如何更改字符串中的字母,知道它在Python中的位置?

2024-04-16 15:06:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写遗传算法的时候遇到了一个问题,当我试图模拟变异过程时: 1所以我选择随机的position = randint(0, len(genes)-1)
其中基因的格式为“10101”,1和0是随机设置的 2我试图用0或1来代替1或0来模拟突变,然后我得到了很多错误。你知道吗

我试着这样做:

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" 

那么,如何用一个符号替换另一个符号,通过它在字符串中的位置得到它呢?你知道吗


Tags: tonewlenif过程格式基因符号
3条回答

正如其他人所指出的,字符串是不可变的。但是,可以使用slice操作符的细节来缩短版本:

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)))

python中的字符串是不可更改的。你知道吗

因此需要创建新实例进行修改。你知道吗

或者您可以使用list来实现这个目的,并在修改后将其转换回str。你知道吗

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

字符串是不可变的,您需要重新分配,您可以执行以下操作:

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:]

相关问题 更多 >