【问题标题】:Python 3 k-mers count errorsPython 3 k-mers 计数错误
【发布时间】:2013-11-24 02:29:06
【问题描述】:

我必须解决一个问题(问题和代码如下),我在执行这个程序时遇到错误。

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-mer。

输入:一个字符串Text和一个整数k。 [XGMcKJXnoMhmuXcsjswaejVunrrsDhoiWEzXbiKoiYBEpVmhJszFWCFJAHLPzKfKBhWbCABPCTqASGvgquUtnwSeeYkXtLcbzMxvcsUwjmhHfexpEEhjhjzKvYdODZeCgrehxUnYqDwYMBxaFsYAqIFsBSZslMmTNXPovRtRbqFOhMXMUErCnRgjiBIovOWXxlkYInG] P>

输出:文本中所有最常见的 k-mer。

我设计的代码是:

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")

【问题讨论】:

  • 请编辑此代码使其清晰易读。所有“在此处输入代码”块的用途是什么?
  • @MikeW 我编辑了它:)
  • 这个错误的意思正是它所说的。您希望 len(string) - k 评估的结果是什么,为什么?

标签: python string types version operand


【解决方案1】:

上面有很多问题:

import string

你为什么要导入这个模块?您打算使用它吗?

string = str()

这隐藏了string 模块,因此您永远不能再次使用它,并创建一个默认(即空)字符串(使用string = '' 更容易做到这一点)。

for k in string:
    k = int(k)

由于string 是一个空字符串,因此循环为零次。

即使不为空,k = int(k) 也不会产生任何影响;你只是一遍又一遍地重新绑定循环变量。如果您想用数字列表替换字符串string,其中每个数字是字符串中相应字符的整数值,您需要通过创建一个空列表并调用@987654329 来构建一个列表@,或使用列表推导(例如,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 是行列表。然后它是一个循环变量。然后……你显然打算把它变成别的东西,但我不知道是什么。然后,它是字典中的每个键。

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2015-11-10
    • 2015-11-09
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多