bam*_*222 3 python string iterator for-loop n-gram
假设我有一串DNA'GAAGGAGCGGCGCCCAAGCTGAGATAGCGGCTAGAGGCGGGTAACCGGCA'
考虑前5个字母:GAAGG
我想用一些与它们发生的可能性相对应的数字替换每个重叠的二元组'GA','AA','AG','GG',将它们相加.像'GA'= 1,'AA'= 2,'AG'= .7,'GG'= .5.所以对于GAAGG,我的sumAnswer = 1 + 2 + .7 + 5.
所以在pseduo代码中,我想... - 在我的DNA字符串中对每个重叠的二元语法进行设置 - 找到每个唯一二元对的相应值 - 每个值迭代地为每个值
我不是很确定如何迭代每一对.我认为for循环可行,但不考虑重叠:它打印每2对(GAGC = GA,GC),而不是每个重叠的2对(GAGC = GA,AG,GC)
for i in range(0, len(input), 2):
print input[i:i+2]
Run Code Online (Sandbox Code Playgroud)
有小费吗?
忘记玩range和索引算术,迭代对是正是zip为了:
>>> dna = 'GAAGG'
>>> for bigram in zip(dna, dna[1:]):
... print(bigram)
...
('G', 'A')
('A', 'A')
('A', 'G')
('G', 'G')
Run Code Online (Sandbox Code Playgroud)
如果你有相应的可能性存储在字典中,如下所示:
likelihood = {
'GA': 1,
'AA': 2,
'AG': .7,
'GG': .5
}
Run Code Online (Sandbox Code Playgroud)
那么你可以很容易地将它们总结为不足为奇的名字sum:
>>> sum(likelihood[''.join(bigram)] for bigram in zip(dna,dna[1:]))
4.2
Run Code Online (Sandbox Code Playgroud)
只需省略,2你的范围,并确保不到达你的字符串的最后:
for i in range(0, len(input)-1):
print input[i:i+2]
Run Code Online (Sandbox Code Playgroud)
该,2告诉Python来在每个迭代上前进两步.通过将其删除,您默认为前进一个.