我正在通过 Rosalind 解决一个问题。自从我被卡住以来已经一周了。我将尝试尽可能简单地解释这一点。
输入 - 一个名为Genome
, 和整数k
, L
, 和的字符串t
。基因组是一串要分类的遗传密码。
k
是一个给定的整数,每个 kmer 的大小。kmer 是遗传密码的一个子串,可能具有某种意义。t
是 kmer 出现在簇中的次数。L
是形成丛的文本的长度。例如,如果L = 400
我们正在寻找一个t
在 400 个字符的簇内出现次数的 kmer。
输出——所有不同的 k-mers 在基因组中形成 (L, t)-团块。
该代码获取基因组,将其分解为所有可能的 kmer 并将这些 kmer 插入字典。kmers 是钥匙。这些值设置为
[frequency_of_kmer, [kmer locations]]
. 该值像这样存储在字典中:{'AAAAA' : [y, [z1,z2]]}
,其中y
是出现次数,并且z1
是z2
字符串中找到子字符串的索引。
基本上,我正在寻找迭代字典。我想找到t
文本中出现次数的键。也就是说,我想找到字典的所有键,d
例如d[key]==t
.
下面的代码,然后是输出。
代码:
from pprint import pprint
genome = "CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACACGACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC"
k = 5
L = 75
t = 4
len_genome = int(len(genome))
l = []
for i in range (len_genome - k + 1):
kmer = genome[i:i +k]
# list of every possible kmer
l.append(kmer)
d = {}
for i in range (len(l)):
try:
d[l[i]][0] += 1
d[l[i]][1].append(i)
except KeyError:
d[l[i]] = [1, [i]]
pprint(d)