【问题标题】:Converting letters using a dictionary使用字典转换字母
【发布时间】:2015-12-17 14:05:11
【问题描述】:

我正在尝试编写一个程序,将匹配字典中键的字母转换为与该键关联的值,例如如果字典是 {'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:我不能硬编码转换表之类的东西,因为从技术上讲字典输入可以更改

【问题讨论】:

    标签: python string list dictionary comparison


    【解决方案1】:

    另一种解决方案是使用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)
    

    【讨论】:

    • 我忘了maketrans!好电话!
    • 不幸的是,我无法对翻译表之类的东西进行硬编码,因为字典是一种输入——从技术上讲,它可能与我正在测试的不同
    • @Saltharion 评论奖金 2 ;-)
    【解决方案2】:

    定义你的字典:

    >>> d = {'A':'T', 'C':'G', 'T':'A', 'G':'C'} 
    

    现在,使用该字典,AAG 可以翻译如下:

    >>> ''.join(d[c] for c in 'AAG')
    'TTC'
    

    【讨论】:

      【解决方案3】:

      所以,在这里举个例子:

      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])
      

      【讨论】:

        【解决方案4】:

        假设: 补充是字典 {'A':'T', 'C':'G', 'T':'A', 'G':'C'}

        到目前为止,您已经有了一个非常好的游戏计划,只是缺少一些想法:
        1)lements.values() 将为您提供字典中所有值的视图(请参阅this)。相反,您想查找您所在角色的特定值。由于您已经使用“if a inlements:”检查了该键是否在字典中,因此您可以使用“compliments[a]”进行查找。
        2) 一旦你构建了一个互补的密码子,你可以将它添加到你的答案列表中并清除你正在构建的密码子。

        您应该注意到这里发布了更清晰的答案,但我想尽可能多地保留您的代码。请阅读此处的其他答案,并尝试了解实现目标的更好方法。

        如果您还有其他问题,请随时提问!

        【讨论】:

        • 如何清除已完成的密码子?正如你所说,其他建议可以转换字母,但现在我需要将它们移动到列表中。使用计数器有用吗?
        • 我假设当您构建密码子时,您将在密码子中留下(例如,AAG -> TTC)TTC。您可以使用“answers.append(codon)”将构建的密码子添加到答案列表中。然后,在循环开始时,您需要确保将密码子重置为 '' (空字符串),或者在添加更多字符时,它们将相互叠加。但是,如果您构建翻译后的密码子而不附加 +=(例如,使用其他人建议的连接命令),则无需清除,因为它们每次都是从头开始构建的。
        【解决方案5】:

        考虑制作一个翻译表:

        >>> 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']
        

        【讨论】:

          【解决方案6】:

          使用功能:

          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"

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-19
            • 2013-10-15
            • 1970-01-01
            • 2019-10-22
            • 2022-11-26
            • 2017-09-27
            相关资源
            最近更新 更多