<p>我查看了您的代码,发现了一些您可能需要查看的内容。在</p>
<p>为了测试我的解决方案,因为我没有生态.txt,我用随机核苷酸生成了自己的一个,其功能如下:</p>
<pre><code>import random
def write_random_sequence():
out_file = open("ecoli.txt", "w")
num_nts = 500
nts_per_line = 80
nts = []
for i in range(num_nts):
nt = random.choice(["A", "T", "C", "G"])
nts.append(nt)
lines = [nts[i:i+nts_per_line] for i in range(0, len(nts), nts_per_line)]
for line in lines:
out_file.write("".join(line) + "\n")
out_file.close()
write_random_sequence()
</code></pre>
<p>请注意,这个文件有一个由500个核苷酸组成的序列,每个序列分成80个核苷酸行。为了计算第一个核苷酸在一个行的末尾,第二个核苷酸在下一行的开头,我们需要将所有这些单独的行合并成一个字符串,没有空格。我们先这么做:</p>
^{pr2}$
<p>试着打印出“seq”,注意它应该是一个包含所有核苷酸的巨大字符串。接下来,我们需要找到序列串中的二核苷酸。我们可以用切片来做,我看你试过了。因此,对于字符串中的每个位置,我们同时查看当前的核苷酸和它后面的核苷酸。在</p>
<pre><code>for i in range(len(seq)-1):#note the -1
dinuc = seq[i:i+2]
</code></pre>
<p>然后我们可以计算核苷酸,并把它们存储在字典“ecnt”中,就像你以前那样。最终代码如下:</p>
<pre><code>ecnt = {}
seq = ""
with open("ecoli.txt", "r") as seq_data:
for line in seq_data:
seq += line.strip()
for i in range(len(seq)-1):
dinuc = seq[i:i+2]
if dinuc in ecnt:
ecnt[dinuc] += 1
else:
ecnt[dinuc] = 1
print ecnt
</code></pre>