Python 复制项目并根据机会将其添加到列表中

Python 复制项目并根据机会将其添加到列表中,python,python-3.x,list,random,append,Python,Python 3.x,List,Random,Append,函数包含3个参数: 病毒(病毒列表)。mutationProb(只有在繁殖时才有0-1机会变异)和reproductionProb(繁殖时有0-1机会变异)。因此,0.2,0.4的浮动将给它40%的繁殖机会,如果它繁殖,20%的变异机会 我已经编写了mutate函数,它工作正常: def mutate(virus): # choose random index to change index = random.randint(0, len(virus) - 1) # m

函数包含3个参数: 病毒(病毒列表)。mutationProb(只有在繁殖时才有0-1机会变异)和reproductionProb(繁殖时有0-1机会变异)。因此,0.2,0.4的浮动将给它40%的繁殖机会,如果它繁殖,20%的变异机会

我已经编写了mutate函数,它工作正常:

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 = [i for i in 'ATCG' if i != virus[index]]

    # swap out the char at index with a random mutation
    return virus[:index] + random.choice(mutations) + virus[index+1:]
但是我的复制不会将新病毒添加到列表中如果病毒复制(基于复制Prob),新病毒应该添加到现有的病毒列表中,无论是否发生变异(基于变异Prob进行变异)

每种病毒都有各自的繁殖机会

def reproduce(viruses, mutationProb, reproductionProb):
    for virus in viruses:
        if random.random() < reproductionProb:
            if random.random() < mutationProb:
                mutate(virus)
                viruses.append(virus)
            else:
                viruses.append(virus)
    return viruses
def reproduction(病毒、突变Prob、复制Prob):
对于病毒中的病毒:
如果为random.random()

有人知道为什么我的函数还没有这样做吗?正如我所见,它根据突变概率附加突变病毒,否则它附加病毒而不发生突变。

正如Carcigenicate所说,你要确保
random.random()
的计算结果如你所料为真,即10次计算4次(或其他)

就你的代码而言,如果你总是想复制一个符合复制标准(40%几率)的病毒,然后只有符合变异标准(20%几率)的病毒才会发生变异,那么你可以稍微简化你的代码

def reproduce(viruses, mutationProb, reproductionProb):
for virus in viruses:

    if random.random() < reproductionProb:
        if random.random() < mutationProb:
            mutate(virus)

        viruses.append(virus)

return viruses
def reproduction(病毒、突变Prob、复制Prob):
对于病毒中的病毒:
如果为random.random()
由于这两个附件都依赖于
random.random()
为真,我将验证该条件的评估是否符合您的预期。是的,它只能在复制样本后输入和预期输出时发生变异。@Ayodhyankitpul输入的病毒[ATCG,GATC]1.0,1.0:output:[ATCG,GATC,TTCG,GAGC]是的!我原来有,但我改变了它,因为它不工作