使用字典转换字母
Converting letters using a dictionary
我正在尝试编写一个程序,将与字典中某个键匹配的字母转换为与该键关联的值,例如如果字典是 {'A':'T', 'C':'G', 'T':'A', 'G':'C'} 并且字符串是 'AAG' 输出应该是 'TTC'.
编辑:由于您的一些回答,这就是我现在得到的:
def matching_codons(complements, poolA):
answer = []
codon = ''
counter = 0
for i in poolA:
for a in i:
codon+= complements[a]
counter += 1
if counter == 3:
answer.append(codon)
不幸的是,这只翻译了前 3 个字母 - 我怎样才能让它在循环中保持 运行?
注意:poolA 是一个字符串列表,例如['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
注意 2:我无法对翻译之类的内容进行硬编码 table 因为从技术上讲,字典输入是可以更改的
定义你的字典:
>>> d = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
现在,使用该词典,AAG
可以翻译如下:
>>> ''.join(d[c] for c in 'AAG')
'TTC'
因此,以您的示例为例:
d = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
x = "AAG"
要让你的结果输出 "TTC",你可以这样做:
s = ""
for i in x:
s += d.get(i)
一个衬垫:
y = "".join([d.get(i) for i in x])
假设:
complements 是字典 {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
到目前为止你已经有了一个非常好的游戏计划,你只缺少一些想法:
1) complements.values() 会让您查看字典中的所有值(参见 this)。您想改为查找您所在角色的特定值。由于您已经使用 "if a in complements:" 检查了密钥是否在字典中,因此您可以使用 "compliments[a]".
查找它
2) 一旦你构建了一个互补的密码子,你就可以将它添加到你的答案列表中并清除你正在构建的密码子。
您应该注意到这里发布了更清晰的答案,但我想尽可能多地保留您的代码。请阅读此处的其他答案,并尝试了解实现目标的更好方法。
如果您还有什么问题,欢迎随时提问!
另一个解决方案是使用 maketrans from string
from string import maketrans
complementTrans = maketrans("ACTG", "TGAC")
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
[codon.translate(complementTrans) for codon in poolA]
你得到:
['TTC', 'ATG', 'GCC', 'CTA', 'AAC', 'CAC', 'GTA', 'CCG', 'TAA', 'AGA']
奖金
使用biopython library总是更好,例如
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
from Bio.Seq import Seq
from Bio.Alphabet import IUPAC
[str(Seq(seq, IUPAC.unambiguous_dna).complement()) for seq in poolA]
你得到相同的结果
奖金2
修复你的代码,我删除了不必要的变量counter
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
complements = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
def matching_codons(complements, poolA):
answer = []
for i in poolA:
codon = '' # inside of for, codon reset in each iteration
for a in i:
codon+= complements[a]
answer.append(codon) # outside of secondary for, codon have three leters to end iterations
return answer
matching_codons(complements, poolA)
考虑进行翻译table:
>>> from string import maketrans
>>> transtab = maketrans("ACTG", "TGAC")
>>> [s.translate(transtab) for s in ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']]
['TTC', 'ATG', 'GCC', 'CTA', 'AAC', 'CAC', 'GTA', 'CCG', 'TAA', 'AGA']
使用函数:
def StringChange(str):
dic = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
output = []
for i in str:
output += dic[i]
print("".join(output))
完成了。你可以使用StringChange("AAG"),然后得到结果"TTC"
我正在尝试编写一个程序,将与字典中某个键匹配的字母转换为与该键关联的值,例如如果字典是 {'A':'T', 'C':'G', 'T':'A', 'G':'C'} 并且字符串是 'AAG' 输出应该是 'TTC'.
编辑:由于您的一些回答,这就是我现在得到的:
def matching_codons(complements, poolA):
answer = []
codon = ''
counter = 0
for i in poolA:
for a in i:
codon+= complements[a]
counter += 1
if counter == 3:
answer.append(codon)
不幸的是,这只翻译了前 3 个字母 - 我怎样才能让它在循环中保持 运行?
注意:poolA 是一个字符串列表,例如['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
注意 2:我无法对翻译之类的内容进行硬编码 table 因为从技术上讲,字典输入是可以更改的
定义你的字典:
>>> d = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
现在,使用该词典,AAG
可以翻译如下:
>>> ''.join(d[c] for c in 'AAG')
'TTC'
因此,以您的示例为例:
d = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
x = "AAG"
要让你的结果输出 "TTC",你可以这样做:
s = ""
for i in x:
s += d.get(i)
一个衬垫:
y = "".join([d.get(i) for i in x])
假设: complements 是字典 {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
到目前为止你已经有了一个非常好的游戏计划,你只缺少一些想法:
1) complements.values() 会让您查看字典中的所有值(参见 this)。您想改为查找您所在角色的特定值。由于您已经使用 "if a in complements:" 检查了密钥是否在字典中,因此您可以使用 "compliments[a]".
查找它
2) 一旦你构建了一个互补的密码子,你就可以将它添加到你的答案列表中并清除你正在构建的密码子。
您应该注意到这里发布了更清晰的答案,但我想尽可能多地保留您的代码。请阅读此处的其他答案,并尝试了解实现目标的更好方法。
如果您还有什么问题,欢迎随时提问!
另一个解决方案是使用 maketrans from string
from string import maketrans
complementTrans = maketrans("ACTG", "TGAC")
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
[codon.translate(complementTrans) for codon in poolA]
你得到:
['TTC', 'ATG', 'GCC', 'CTA', 'AAC', 'CAC', 'GTA', 'CCG', 'TAA', 'AGA']
奖金
使用biopython library总是更好,例如
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
from Bio.Seq import Seq
from Bio.Alphabet import IUPAC
[str(Seq(seq, IUPAC.unambiguous_dna).complement()) for seq in poolA]
你得到相同的结果
奖金2
修复你的代码,我删除了不必要的变量counter
poolA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
complements = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
def matching_codons(complements, poolA):
answer = []
for i in poolA:
codon = '' # inside of for, codon reset in each iteration
for a in i:
codon+= complements[a]
answer.append(codon) # outside of secondary for, codon have three leters to end iterations
return answer
matching_codons(complements, poolA)
考虑进行翻译table:
>>> from string import maketrans
>>> transtab = maketrans("ACTG", "TGAC")
>>> [s.translate(transtab) for s in ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']]
['TTC', 'ATG', 'GCC', 'CTA', 'AAC', 'CAC', 'GTA', 'CCG', 'TAA', 'AGA']
使用函数:
def StringChange(str):
dic = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
output = []
for i in str:
output += dic[i]
print("".join(output))
完成了。你可以使用StringChange("AAG"),然后得到结果"TTC"