7

私のコードは非効率的すぎると思います。よくわかりませんが、文字列の使用と関係があると思います。コードは次のとおりです。

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 近くあり、かなり大きいです。

4

2 に答える 2