我必须解决一个问题(问题和代码如下),我在执行这个程序时遇到错误。
Traceback (most recent call last):
File "C:/Python33/exercise1.py", line 9, in <module>
for n in range[len(string) - k]:
TypeError: unsupported operand type(s) for -: 'int' and 'list'
-
常见字词问题:查找字符串中最常见的字符。
输入:字符串文本和整数k。 [XGMcKJXnoMhmuXcsjswaejVunrrsDhoiWEzXbiKoiYBEpVmhJszFWCFJAHLPzKfKBhWbCABPCTqASGvgquUtnwSeeYkXtLcbzMxvcsUwjmhHfexpEEhjhjzKvYdODZeCgrehxUnYqDwYMBxaFsYAqIFsBSZslMmTNXPovRtRbqFOhMXMUErCnRgjiBIovOWXxlkYInG]
输出:文本中所有最常见的k-mers。
我设计的代码是:
k=open("dataset_3_6.txt").readlines()
import string
string = str()
for k in string:
k = int(k)
kmer_count = {}
for n in range(len(string) - k):
c = string[n:n+k]
kmer_count[c] = kmer_count[c] + 1 if kmer_count.has_key(c) else 1
max = 0
max_kmer = []
for k,v in kmer_count.iteritems():
if v > max:
max_kmer = [k]
max = v
elif v == max:
max_kmer += [k]
print("max_kmer")
答案 0 :(得分:3)
顶部有很多问题:
import string
为什么要导入此模块?你打算用它吗?
string = str()
这会隐藏string
模块,因此您再也不能使用它,并创建一个默认(即空)字符串(使用string = ''
更容易)。
for k in string:
k = int(k)
由于string
是一个空字符串,因此循环零次。
即使它不是空的,k = int(k)
也不会有任何影响;你只是一遍又一遍地重新绑定循环变量。如果要将字符串string
替换为数字列表,其中每个数字是字符串中相应字符的整数值,则需要通过创建空列表并调用来构建列表append
,或使用列表推导(例如string = [int(k) for k in string]
)。我不知道你是否真的想在这里做什么。
无论如何,如果string
不为空,则在循环之后,k
将是字符串中最后一个字符的int值。但是既然如此,k
仍然是之前调用open("dataset_3_6.txt").readlines()
的结果。也就是说,它是一个行列表。所以,在这:
for n in range(len(string) - k):
您尝试从数字0中减去该行列表。(请记住,您将string
设置为空字符串,因此其len
为0。)
我不知道你的预期是什么。
部分困惑在于您拥有无意义的变量名称,并且您重复使用相同的名称来反复引用不同的内容。第一个k
是行列表。然后它是一个循环变量。然后......你显然想要它是另一回事,但我不知道是什么。然后,它是字典中的每个键。