如何迭代一个DNA代码串中每一个[:2]个重叠字符?

2024-10-01 09:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一串DNA“gaaggaggcgccccaagtgagagagaggcagctagaggcgggtaaccggca”

考虑前5个字母:GAAGG

我想把每一个重叠的双字母'GA'、'AA'、'AG'、'GG'替换成与它们出现的可能性相对应的数字,并将它们相加。比如‘GA’=1,‘AA’=2,‘AG’=0.7,‘GG’=0.5。所以对于GAAGG,我的sumAnswer=1+2+.7+5。在

所以在psedoo代码中,我想。。。 -在我的DNA串中的每一个重叠的双元组上迭代 -找到每个唯一双gram对的对应值 -迭代求和每个值

我不太确定如何迭代每一对。我以为for循环可以工作,但这并不能解释重叠:它打印每2对(GAGC=GA,GC),而不是每个重叠的2对(GAGC=GA,AG,GC)

for i in range(0, len(input), 2):
      print input[i:i+2]

有什么提示吗?在


Tags: forinput字母数字可能性gcdnaaa
3条回答

只需将范围内的,2去掉,并确保不会到达字符串的末尾:

for i in range(0, len(input)-1):
    print input[i:i+2]

,2告诉Python在每次迭代中向前推进两步。如果忽略它,则默认为向前迈进一步。在

other answer应该这样做。在

如果您真的需要迭代器:

# define the iterator
def dnaiter(input): 
    for i in xrange(0, len(input) - 1): 
        yield input[i:i+2]

# then use the iterator
for s in dnaiter(input): 
    print s

但是,只有当您有一个要迭代的真正的长序列时,才需要这个。在

忘记使用range和索引算法,迭代对正是zip的作用:

>>> dna = 'GAAGG'
>>> for bigram in zip(dna, dna[1:]):
...    print(bigram)
... 
('G', 'A')
('A', 'A')
('A', 'G')
('G', 'G')

如果您在字典中存储了相应的可能性,例如:

^{pr2}$

然后,您可以很容易地用sum来求和:

>>> sum(likelihood[''.join(bigram)] for bigram in zip(dna,dna[1:]))
4.2

相关问题 更多 >