使用字典转换字母

时间:2015-09-21 00:12:19

标签: python string list dictionary comparison

我正在尝试编写一个程序,将与字典中的键匹配的字母转换为与该键相关联的值,例如如果字典是{'A':'T','C':'G','T':'A','G':'C'},字符串是'AAG',输出应为'TTC' ”。

编辑:由于你的一些答案,这就是我现在所拥有的:

function fixMe(id) {
    var e = $(id);
    var lastScrollTop = 0;
    var firstOffset = e.offset().top;
    var lastA = e.offset().top;
    var isFixed = false;
    $(window).scroll(function(event){
        if (isFixed) {
            return;
        }
        var a = e.offset().top;
        var b = e.height();
        var c = $(window).height();
        var d = $(window).scrollTop();
        if (b <= c - a) {
            e.css({position: "fixed"});
            isFixed = true;
            return;
        }           
        if (d > lastScrollTop){ // scroll down
            if (e.css("position") != "fixed" && c + d >= a + b) {
                e.css({position: "fixed", bottom: 0, top: "auto"});
            }
            if (a - d >= firstOffset) {
                e.css({position: "absolute", bottom: "auto", top: lastA});
            }
        } else { // scroll up
            if (a - d >= firstOffset) {
                if (e.css("position") != "fixed") {
                    e.css({position: "fixed", bottom: "auto", top: firstOffset});
                }
            } else {
                if (e.css("position") != "absolute") {
                    e.css({position: "absolute", bottom: "auto", top: lastA});
                }               
            }
        }
        lastScrollTop = d;
        lastA = a;
    });
}

fixMe("#stick");

不幸的是,这只会翻译前3个字母 - 如何让它继续在循环中运行?

注意:poolA是一个字符串列表,例如['AAG','TAC','CGG','GAT','TTG','GTG','CAT','GGC','ATT','TCT']

注2:我不能像翻译表那样硬编码,因为技术上可以更改字典输入

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

定义词典:

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

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

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

答案 2 :(得分:1)

所以,举个例子:

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

x = "AAG"

要将结果输出到#34; TTC&#34;,您可以这样做:

s = ""
for i in x:
    s += d.get(i)

这是一个内线:

y = "".join([d.get(i) for i in x])

答案 3 :(得分:1)

假设: 补充是字典{&#39; A&#39;&#39;&#39;&#39; C&#39;:&#39; G&#39;&#39; T&#39;: &#39; A&#39;,&#39; G&#39;:&#39; C&#39;}

到目前为止,你有一个非常好的游戏计划,你只是缺少一些想法:
1)complements.values()将为您提供dict中所有值的视图(请参阅this)。您想要查找您所在角色的特定值。正如您已经检查过键是否在字典中的&#34;如果是补充:&#34;,您可以使用&#34;赞美[a]&#34;来查找它。 2)一旦你建立了一个补充密码子,你可以将它添加到你的答案列表中,并清除你正在建立的密码子。

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

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

答案 4 :(得分:0)

考虑制作一个翻译表:

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

答案 5 :(得分:0)

使用功能:

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”