Python 在列表之间随机交换项目

Python 在列表之间随机交换项目,python,bioinformatics,Python,Bioinformatics,我正在编写一个小脚本,其中包括将一个密码子(我列表中的一个项目)更改为另一个,randonmly。 我首先将DNA序列转换成密码子列表,然后我希望脚本选择一个随机序列,并将其从密码子列表中更改为另一个。问题是,这只是第一次出现在清单上。(即使它选择了最后一个项目,也会将其替换为列表中与该项目相等的第一个项目)。 我不知道我是否足够清楚,我还在学习。 代码如下: import random codones = ['ATA', 'ATC', 'ATT', 'ATG',

我正在编写一个小脚本,其中包括将一个密码子(我列表中的一个项目)更改为另一个,randonmly。 我首先将DNA序列转换成密码子列表,然后我希望脚本选择一个随机序列,并将其从密码子列表中更改为另一个。问题是,这只是第一次出现在清单上。(即使它选择了最后一个项目,也会将其替换为列表中与该项目相等的第一个项目)。 我不知道我是否足够清楚,我还在学习。 代码如下:

import random 


codones = ['ATA', 'ATC', 'ATT', 'ATG', 
           'ACA', 'ACC', 'ACG', 'ACT', 
           'AAC', 'AAT', 'AAA', 'AAG', 
           'AGC', 'AGT', 'AGA', 'AGG',                  
           'CTA', 'CTC', 'CTG', 'CTT', 
           'CCA', 'CCC', 'CCG', 'CCT', 
           'CAC', 'CAT', 'CAA', 'CAG', 
           'CGA', 'CGC', 'CGG', 'CGT', 
           'GTA', 'GTC', 'GTG', 'GTT', 
           'GCA', 'GCC', 'GCG', 'GCT', 
           "GAC", 'GAT', 'GAA', 'GAG', 
           'GGA', 'GGC', 'GGG', 'GGT', 
           'TCA', 'TCC', 'TCG', 'TCT', 
           'TTC', 'TTT', 'TTA', 'TTG', 
           'TAC', 'TAT', 'TGC', 'TGT', 
           'TGG']


dna = "atgaaaagcatgaaaagc" 
DNA = dna.upper()

print(DNA)

print("El gen tiene " + str(int(len(dna)/3)) + " Aa:")

def codones_dna(seq):
    codon = []
    for i in range(0, len(seq), 3):
        codon.append(seq[i:i +3])
    return codon
lista_codones = codones_dna(DNA)
print(lista_codones)

def translate(seq):
    table = { 
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M', 
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T', 
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K', 
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                  
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L', 
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P', 
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q', 
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R', 
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V', 
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A', 
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E', 
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G', 
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S', 
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L', 
        'TAC':'Y', 'TAT':'Y', 'TGC':'C', 'TGT':'C', 
        'TGG':'W' 
    } 
    protein = " "
    if len(seq) % 3 == 0:
        for i in range(0, len(seq), 3):
            codon = seq[i:i + 3]
            protein += table[codon].lower()
    return protein
protein = translate(DNA)
print(protein)


def mutation(seq):  
    for i in range(0, len(seq), 3): 
        dna_mut = seq[i:i]
        wt = random.choice(lista_codones)
        mutado = random.choice(codones)
        if wt != mutado:
            dna_mut += seq.replace(wt, mutado, 1)


    return dna_mut

dna_mut = mutation(DNA) 
首先,这一行:

print("El gen tiene " + str(int(len(dna)/3)) + " Aa:")
是非常多余的,它的作用与:

print("El gen tiene", len(dna)/3, "Aa:")
只是以可读性较差的方式。第二,你的变异函数应该是:

def mutation(seq):  
    dna_as_list = [ seq[i:i+3] for i in range(0, len(seq), 3) ] # here you split seq into codons
    wt = random.choice(lista_codones)
    mutado = random.randint(0,len(dna_as_list)-1) # here you generate a random index
    dna_as_list[mutado] = wt # replace the codon at the generated index
    return ''.join(dna_as_list)

也许这是有用的:

重新导入
从随机导入randint
密码子=['ATA'、'ATC'、'ATT'、'ATG',
“ACA”、“ACC”、“ACG”、“ACT”,
‘AAC’、‘AAT’、‘AAA’、‘AAG’,
‘AGC’、‘AGT’、‘AGA’、‘AGG’,
‘CTA’、‘CTC’、‘CTG’、‘CTT’,
‘CCA’、‘CCC’、‘CCG’、‘CCT’,
‘CAC’、‘CAT’、‘CAA’、‘CAG’,
‘CGA’、‘CGC’、‘CGG’、‘CGT’,
‘GTA’、‘GTC’、‘GTG’、‘GTT’,
“GCA”、“GCC”、“GCG”、“GCT”,
“GAC”、“GAT”、“GAA”、“GAG”,
‘GGA’、‘GGC’、‘GGG’、‘GGT’,
‘TCA’、‘TCC’、‘TCG’、‘TCT’,
‘TTC’、‘TTT’、‘TTA’、‘TTG’,
“TAC”、“TAT”、“TGC”、“TGT”,
“TGG”]
dna_序列='ATGAAAGCATGAAAGC'
def替换随机顺序(dna:str,替换列表:列表):
sequences=re.findall(“\w\w\w”,dna)#搜索dna中的3个字母模式
ran_index=序列[randint(0,len(序列)]#获取序列的随机索引
序列[ran_索引]=替换_列表[randint(0,len(替换_列表)]#将随机索引中的项目替换为序列列表中的随机序列
新_dna=“”
对于顺序中的项目:
新的\u dna+=项目
归还新的dna
打印(替换随机序列(dna序列,密码子))

刚刚使用正则表达式找到所有3个字母的模式,并用列表中不同的模式替换其中一个。

您有一个密码子列表,想将这些密码子的值更改为相同列表的值?您能显示样本预期数据吗?您有一个dna序列字符串,想在序列列表中将其更改为随机序列吗?我想是的,例如:给定序列“dna=”ATGAAAGCATGAAAGC“,我改变其中一个密码子(注意序列自身重复)。产生的突变可能是,例如,ATG(GAG)AGCATGAAAGC(它将aaa改为GAG).问题是它不能对第二部分执行此操作,当序列自身重复时,换句话说,它永远不会以第二个“aaa”为目标"在序列中。Holly balls我相信它是有效的!问题是我想使用索引对吗?非常感谢!我必须从新字符串中删除空格,这样它就可以用翻译程序编码成蛋白质,很好!谢谢!据我所知,三个字符的序列必须是一个完整的密码子,也就是说,它必须从n索引可被3整除。哦,好吧。我不知道。@Błotosmętek我现在已经修复了它。我认为这在几行代码中应该可以正常工作:)