首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制项目并根据机会将其添加到列表中

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

Stack Overflow用户
提问于 2017-12-08 21:35:02
回答 1查看 115关注 0票数 2

函数reproduce接受3个参数:病毒(病毒列表)。mutationProb(仅在重现时浮点0-1的变异几率)和reproductionProb(浮点0-1的重现几率)。因此,浮点数为0.2,0.4将使它有40%的可复制率,如果它复现,则有20%的机会发生突变。

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

代码语言:javascript
复制
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:]

但我的复制不会将新病毒添加到列表中如果病毒复制(基于reproductionProb ),新病毒应该添加到现有的病毒列表中,无论是否发生了突变(基于mutationProb )。

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

代码语言:javascript
复制
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

有没有人知道为什么我的函数还没有做到这一点?在我看来,它会根据mutationProb添加变异的病毒,否则它会在没有变异的情况下添加它。

EN

回答 1

Stack Overflow用户

发布于 2017-12-08 21:59:35

正如Carcigenicate所说,你想要确保random.random() < reproductionProb的计算结果是真的,就像你预期的那样,即10次中有4次(或其他任何情况)。

就你的代码而言,如果你总是想在病毒满足复制标准(40%的机会)时复制一份病毒,然后只有在满足突变标准(20%的机会)的情况下才对其进行变异,那么你可以稍微简化一下你的代码。

代码语言:javascript
复制
def reproduce(viruses, mutationProb, reproductionProb):
for virus in viruses:

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

        viruses.append(virus)

return viruses
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47715465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档