当我执行此操作时,没有响应。为什么或可能导致此问题发生的原因?
以下是我尝试过的代码。
#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
非常感谢任何帮助。
答案 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]的列表,然后使用列表中的每个项目。