在Text中查找最常用的k-mers时没有输出

时间:2016-08-17 13:53:49

标签: python-2.7

当我执行此操作时,没有响应。为什么或可能导致此问题发生的原因?

以下是我尝试过的代码。

#Frequent Words

name = raw_input("Enter file:")
if len(name) < 1 :
    name = "dataset_2_10.txt"
handle = open(name,"r")
Text = handle.read()
k = raw_input("Enter k:")
k = int(k)

def PatternCount(Text,Pattern):
    count = 0
    i = 0
    while i < len(Text)-len(Pattern):
        if Text[i:i+len(Pattern)] == Pattern :
            count = count + 1
        i = i + 1
    return count

FrequentPatterns = list()
i = 0
Count = list()
while i < len(Text)-k:
    Pattern = Text[i:i+k]
    Count.append(PatternCount(Text,Pattern))
    i = i + 1
maxCount = max(Count)
#print maxCount
j = 0
while j < len(Text)-k:
    if Count[j] == maxCount:
        FrequentPatterns.append(Text[j:j+k])
        print Count[j]
        j = j + 1
print FrequentPatterns

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您没有得到任何输出,因为每次提供大于1的k时都会遇到无限循环。

这是因为在第二个while循环中,如果找到了k-mer,则只增加j。但是因为k&gt;并不总是满足条件if Count[j] == maxCount:。 1,你没有到达j = j + 1并且j保持不变。 (你可以看到,如果你在循环中添加一个print语句。)

要解决此问题,请将j = j + 1从if块(现在的位置)移动到循环体,如下所示:

j = 0
while j < len(Text)-k:
    if Count[j] == maxCount:
        FrequentPatterns.append(Text[j:j+k])
        print Count[j]
    j = j + 1

现在,无论是否找到k-mer,j每次都会递增。

那就是说,在python中有更好的方法来做到这一点。您可以使用for循环迭代所有索引,就像现在一样,但没有无限循环的危险。考虑一下:

i = 0
while i < 10:
    print i
    i = i + 1

for j in range(10):
    print(j)

第二个循环产生相同的结果,并且更不容易出现故障。您使用range(10)生成数字[0,..,9]的列表,然后使用列表中的每个项目。