使用字典转换字母

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"