forloop中的迭代器:为什么这不起作用?

2024-05-29 04:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码,它不工作,我不知道为什么。你知道吗

我的数据结构:

  • “genes”是一个字典,它的键是ID,值是倍数 目标基因的实例。你知道吗
  • Gene对象包含一个类似的字典,其中包含 对象“抄本”。你知道吗

最后,“parent”是成绩单的ID(字符串)。 我需要获取与字符串“parent”具有相同ID的Transcript实例(ptrans)。 它在一个基因实例中。你知道吗

当我在底层运行代码时,我没有得到一个真正的异常,而是一个“StopIteration”,我认为我捕获了它,然后它应该继续下一个Gene对象,对吗?地址:

Traceback (most recent call last): File "<stdin>", line 1, in <module> ... ptrans = next(t for t in g.transcripts.values() if t.ID == parent) StopIteration

我可以用嵌套的for循环来实现,但我认为这也可以。我就是想不通这是怎么回事。有人能解释为什么,或者它是如何工作的吗?你知道吗

    # iterate over Gene-dict
    for g in genes.values(): 
        #Iterate over Transcripts in 1 Gene
        try:
            ptrans = next(t for t in g.transcripts.values() if t.ID == parent)
        #If no match, continue
        except StopIteration:
            continue
        if ptrans:
                break

Tags: 对象实例代码inidforif字典
1条回答
网友
1楼 · 发布于 2024-05-29 04:42:31

你的代码

ptrans = next(t for t in g.transcripts.values() if t.ID == parent)

几乎可以肯定的是,他没有按照你的想法去做。我怀疑g.transcript.values()中没有将父项作为其ID的项,因为在空生成器上调用next()确实会引发StopIteration错误。你知道吗

但是next()函数在任何情况下都只会被调用一次,这意味着即使有有效值,也只会返回第一个值。嵌套循环是一种更简单的方法来实现您要做的事情。你知道吗

相关问题 更多 >

    热门问题