私のコードは非効率的すぎると思います。よくわかりませんが、文字列の使用と関係があると思います。コードは次のとおりです。
genome = FASTAdata[1]
genomeLength = len(genome);
# Hash table holding all the k-mers we will come across
kmers = dict()
# We go through all the possible k-mers by index
for outer in range (0, genomeLength-1):
for inner in range (outer+2, outer+22):
substring = genome[outer:inner]
if substring in kmers: # if we already have this substring on record, increase its value (count of num of appearances) by 1
kmers[substring] += 1
else:
kmers[substring] = 1 # otherwise record that it's here once
これは、最大 20 の長さのすべての部分文字列を検索することです。このコードはかなり時間がかかり、決して終了しないように見えるので、ここで何かが間違っているに違いありません。文字列に [:] を使用すると、大きなオーバーヘッドが発生しますか? もしそうなら、私はそれを何と置き換えることができますか?
明確にするために、問題のファイルは 200 MB 近くあり、かなり大きいです。