我正在尝试编写一个程序,将与字典中的键匹配的字母转换为与该键相关联的值,例如如果字典是{'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:我不能像翻译表那样硬编码,因为技术上可以更改字典输入
答案 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”