用一个字母随机替换字符串中的N个字符

2024-10-01 07:43:59 发布

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

所以我有一个DNA序列文件,我的目标是用字母M随机替换序列中的5个核苷酸

ie.dna1.txt具有ACTGGCTACATTG序列

我想让ACTGGCTACATTG看起来像ACMMGCMMCATMG之类的东西

我知道如何一次替换一封信,但不是几个

dna1 = open ("dna1.txt","r")
data1 = dna1.read()

from random import randint, choice

def Mutated_DNA(data1):
    dna_list = list(data1)
    mutation_site = randint(0, len(dna_list)-1)
    dna_list[mutation_site] = choice(list('M'))        
    return ''.join(dna_list) 

print (Mutated_DNA(data1))

我该怎么办


Tags: 文件txt目标site序列listdnarandint
1条回答
网友
1楼 · 发布于 2024-10-01 07:43:59

如果你想用新的字符替换确切的5个字符,那么我认为最简单的方法是从可能的位置取样,然后完全改变这些位置。例如:

from random import sample

def mutate(s, num, target):
    change_locs = set(sample(range(len(s)), num))
    changed = (target if i in change_locs else c for i,c in enumerate(s))
    return ''.join(changed)

例如

>>> mutate('ABC', 2, 'M')
'MMC'
>>> mutate('ABC', 2, 'M')
'AMM'
>>> mutate('ABC', 2, 'M')
'MMC'
>>> mutate('ABC', 2, 'M')
'MBM'

def mutate(s, num, target):
    change_locs = sample(range(len(s)), num)
    new_s = list(s)
    for change_loc in change_locs:
        new_s[change_loc] = target
    return ''.join(new_s)

等等

相关问题 更多 >