在列表之间随机交换项目
Randomnly swapping items betwen lists
我正在编写一个小脚本,其中涉及将一个密码子(我列表中的一项)随机更改为另一个密码子。
我首先将 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)
也许这个有用:
import re
from random import randint
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_sequence = 'atgaaaagcatgaaaagc'
def replace_random_seq(dna: str, replace_list: list):
sequences = re.findall("\w\w\w", dna) # searches for 3 letter pattern in dna
ran_index = sequences[randint(0, len(sequences)] # get a random index of a sequence
sequences[ran_index] = replace_list[randint(0, len(replace_list)] # replace the item in the random index with a random sequence in the sequences list
new_dna = ""
for item in sequences:
new_dna += item
return new_dna
print(replace_random_seq(dna_sequence, codones))
刚刚使用正则表达式找到了所有 3 个字母的模式,并将其中一个替换为您列表中的另一个。
我正在编写一个小脚本,其中涉及将一个密码子(我列表中的一项)随机更改为另一个密码子。 我首先将 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)
也许这个有用:
import re
from random import randint
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_sequence = 'atgaaaagcatgaaaagc'
def replace_random_seq(dna: str, replace_list: list):
sequences = re.findall("\w\w\w", dna) # searches for 3 letter pattern in dna
ran_index = sequences[randint(0, len(sequences)] # get a random index of a sequence
sequences[ran_index] = replace_list[randint(0, len(replace_list)] # replace the item in the random index with a random sequence in the sequences list
new_dna = ""
for item in sequences:
new_dna += item
return new_dna
print(replace_random_seq(dna_sequence, codones))
刚刚使用正则表达式找到了所有 3 个字母的模式,并将其中一个替换为您列表中的另一个。