【问题标题】:Python: nested for loop - name not definedPython:嵌套for循环 - 名称未定义
【发布时间】: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 在短时间内连续出现多次的区域......”
  • 你能解释一下你想让ck代表什么吗?我知道您正在滑动一个长度为l 的窗口,但我不明白您想在该窗口内做什么。另外,我假设d 是一个保存计数的字典,但它应该保存看到的kmers 的总数,还是只保存当前窗口中的数字?
  • 假设我有一个字符串“ATCGATCGTAGCGCGGGGCACGCGGACTGCTGTGCTAGTA”。那就是“基因组”变量。我需要找出最常出现的字母序列(在某个窗口中),它的长度应该是“k”。我使用“c”只是为了有一个计数器,它可以指示比较序列的窗口的开始和结束。 --edit-- D 保存长度为“k”的每个不同序列出现在任何窗口中的次数。我只使用最大值,如果有更多相同出现的序列,我只需将它们全部打印出来,我已经在一个更简单的问题上这样做了。
  • @user2984872:我已经编辑了我认为你想要达到的目标的答案。

标签: python-2.7 for-loop nested bioinformatics dna-sequence


【解决方案1】:

您在第二个for 循环中定义c,并尝试在同一语句中使用它。因此,直到您开始 for 循环,c 才被定义,因此没有被定义。

编辑

根据您的 cmets 判断,我相信您正在尝试做的是沿着基因组滑动一个长度为 l 的窗口。然后你想找到为一些 k-mer(s) 丰富的窗口。为此,我将修改您的第二个循环以查看当前窗口开始的下一个 l 位置:

for c in range(i, i+l):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多