【发布时间】:2013-11-25 04:34:23
【问题描述】:
首先,我必须指出我不是程序员,所以这可能是一个愚蠢的问题,但我想了解这里发生了什么。
程序应该遍历一个字符串(基因组),并滑动一个任意长度的窗口(在本例中为“l”)。它搜索给定长度 (k) 的重复字符序列并记录序列的出现次数。我确实设法在整个字符串中找到重复的序列,但所说的窗口让我很困扰。我尝试使用嵌套循环:
for i in range(len(genome) - k + 1):
for c in range(len(genome))[c:c+l]:
kmer = genome[i:i+k]
if kmer in d:
d[kmer] += 1
else:
d[kmer] = 1
我收到一个错误:“NameError: name 'c' is not defined” 这个问题的原因是什么,是否有一种易于理解的解决方法?效率并不是很重要,所以我想保持类似的结构(我发现很多主题描述了避免使用嵌套 for 循环的方法,但目前我觉得它很混乱)。
提前谢谢你。
【问题讨论】:
-
你打算
for c in range(len(genome))[c:c+l]做什么?for应该定义您希望c迭代的内容,因此您不能在for表达式本身中使用c。 -
谢谢,我明白这是多么愚蠢的错误。基本上,我希望第二个循环将原始字符串“限制”到一定长度,并在该窗口中找到最重复的字符序列 - 这是问题的条件,找到最常见的序列,但同样,只有在字符串的一段内。 “......我们的计划是沿着基因组滑动一个固定长度 L 的窗口,寻找一个 k-mer 在短时间内连续出现多次的区域......”
-
你能解释一下你想让
c和k代表什么吗?我知道您正在滑动一个长度为l的窗口,但我不明白您想在该窗口内做什么。另外,我假设d是一个保存计数的字典,但它应该保存看到的kmers 的总数,还是只保存当前窗口中的数字? -
假设我有一个字符串“ATCGATCGTAGCGCGGGGCACGCGGACTGCTGTGCTAGTA”。那就是“基因组”变量。我需要找出最常出现的字母序列(在某个窗口中),它的长度应该是“k”。我使用“c”只是为了有一个计数器,它可以指示比较序列的窗口的开始和结束。 --edit-- D 保存长度为“k”的每个不同序列出现在任何窗口中的次数。我只使用最大值,如果有更多相同出现的序列,我只需将它们全部打印出来,我已经在一个更简单的问题上这样做了。
-
@user2984872:我已经编辑了我认为你想要达到的目标的答案。
标签: python-2.7 for-loop nested bioinformatics dna-sequence