【问题标题】:Replace random value in string with random value用随机值替换字符串中的随机值
【发布时间】:2018-05-21 23:41:01
【问题描述】:

病毒应该是一串核苷酸,该函数应该返回一个由相同数量的核苷酸组成的字符串,但其中一个被改变了。

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

例如,如果病毒是 ATCG,它应该返回 ATCC 或 GTCG 之类的东西,我该怎么做呢?我尝试将病毒放入列表中,并用我可能的突变列表中的随机替换其中的随机变量.

所以它可能应该从字符串病毒中创建一个列表,进行突变,将列表放回字符串并返回字符串。

【问题讨论】:

  • 应该改变多少个字母?这也是随机的吗?
  • 如果这是遗传算法的一部分并且会重复多次,请考虑使用列表而不是字符串。

标签: python string python-3.x list random


【解决方案1】:

您可以生成一个随机索引来替换 at 和一个随机值:

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

【讨论】:

  • 也许使用范围/切片语法而不是显式循环? virus[:i] + val + virus[1+i:]
【解决方案2】:

你可以做某事。像下面这样:

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

【讨论】:

  • 嘿伙计,将索引也更改为 i,现在它可以工作了!我爱你,你能解释一下你的代码吗?我看到你使用了列表切片。
  • @RubenWeijers 不,这些是字符串的片段。
【解决方案3】:

你可以这样做:

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)

【讨论】:

    【解决方案4】:

    由于字符串是不可变的,我建议使用列表而不是字符串。我认为可读性也会提高。

    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
    

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2018-04-03
      • 2015-01-20
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多