Python 2.7 Python:嵌套for循环-未定义名称
首先,我必须指出,我不是程序员,所以这可能是一个愚蠢的问题,但我想了解这里发生了什么 程序应该遍历字符串(基因组),并滑动任意长度的窗口(在本例中为“l”)。它搜索给定长度(k)的重复字符序列,并记录序列的出现次数。我确实在整个字符串中找到了重复的序列,但所说的窗口让我感到不安。我尝试使用嵌套循环:Python 2.7 Python:嵌套for循环-未定义名称,python-2.7,for-loop,nested,bioinformatics,dna-sequence,Python 2.7,For Loop,Nested,Bioinformatics,Dna Sequence,首先,我必须指出,我不是程序员,所以这可能是一个愚蠢的问题,但我想了解这里发生了什么 程序应该遍历字符串(基因组),并滑动任意长度的窗口(在本例中为“l”)。它搜索给定长度(k)的重复字符序列,并记录序列的出现次数。我确实在整个字符串中找到了重复的序列,但所说的窗口让我感到不安。我尝试使用嵌套循环: for i in range(len(genome) - k + 1): for c in range(len(genome))[c:c+l]: kmer = genome[
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:未定义名称“c”
这个问题的原因是什么?有没有一种简单易懂的解决方法?效率并不是很重要,所以我想保持一个类似的结构(我发现很多主题描述了避免使用嵌套for循环的方法,但我发现目前它非常混乱)
提前感谢。您在第二个
for
循环中定义了c
,并尝试在同一语句中使用它。因此,c
在开始for
循环之前不会被定义,因此不会被定义
编辑
从你的评论来看,我相信你想做的是沿着基因组滑动一个长度为l的窗口。然后,您希望找到为一些k-mer(s)而丰富的窗口。为此,我将修改您的第二个循环,从当前窗口开始查看下一个l
位置:
for c in range(i, i+l):
在第二个
for
循环中定义c
,并尝试在同一语句中使用它。因此,c
在开始for
循环之前不会被定义,因此不会被定义
编辑
从你的评论来看,我相信你想做的是沿着基因组滑动一个长度为l的窗口。然后,您希望找到为一些k-mer(s)而丰富的窗口。为此,我将修改您的第二个循环,从当前窗口开始查看下一个l
位置:
for c in range(i, i+l):
你打算对范围内的c(len(基因组))[c:c+l]做什么?for的
应该定义要迭代的c
,因此不能在for
表达式中使用c
。谢谢,我理解这是一个多么愚蠢的错误。基本上,我希望第二个循环将原始字符串“限制”到某个长度,并在该窗口中查找重复性最强的字符序列-这就是问题的条件,查找最常见的序列,但同样,仅在字符串的一段中。“…我们的计划是沿着基因组滑动一个固定长度L的窗口,寻找一个k-mer连续出现几次的区域…”你能解释一下你想要c
和k
代表什么吗?我知道你正在滑动一个长度为l
的窗口,但我不明白你想在该窗口内做什么。另外,我假设d
是一个dict holding counts,但它应该保存看到的kmer
s的总数,还是仅保存当前窗口中的数字?假设我有一个字符串“atcgatcgtagcgggcacggactgctgctagta”。这就是“基因组”变量。我需要找出最常出现的字母序列(在某个窗口中),其长度应为“k”。我使用“c”只是为了有一个计数器,它可以指示窗口的开始和结束,以便比较序列--edit--D保存长度“k”的每个不同序列在任何窗口中出现的次数。我只使用最大值,如果有更多相同出现的序列,我只打印它们,我已经在一个更简单的问题上这样做了。@user2984872:我已经编辑了我的答案,我认为您正在尝试实现的目标。您打算对范围内的c(len(基因组))[c:c+l]
做什么?for的应该定义要迭代的c
,因此不能在for
表达式中使用c
。谢谢,我理解这是一个多么愚蠢的错误。基本上,我希望第二个循环将原始字符串“限制”到某个长度,并在该窗口中查找重复性最强的字符序列-这就是问题的条件,查找最常见的序列,但同样,仅在字符串的一段中。“…我们的计划是沿着基因组滑动一个固定长度L的窗口,寻找一个k-mer连续出现几次的区域…”你能解释一下你想要c
和k
代表什么吗?我知道你正在滑动一个长度为l
的窗口,但我不明白你想在该窗口内做什么。另外,我假设d
是一个dict holding counts,但它应该保存看到的kmer
s的总数,还是仅保存当前窗口中的数字?假设我有一个字符串“atcgatcgtagcgggcacggactgctgctagta”。这就是“基因组”变量。我需要找出最常出现的字母序列(在某个窗口中),其长度应为“k”。我使用“c”只是为了有一个计数器,它可以指示窗口的开始和结束,以便比较序列--edit--D保存长度“k”的每个不同序列在任何窗口中出现的次数。我只使用最大值,如果有更多的序列出现相同的情况,我只打印它们,我已经在一个更简单的问题上这样做了。@user2984872:我已经编辑了我的答案,我认为您正在尝试实现的目标。