Python:是否有可能事先知道迭代器对象中有多少次迭代?

Nie*_*ein 4 python iterator

到目前为止,如果我想知道迭代器中有多少次迭代(在我的情况下,文件中有多少蛋白质序列)我做了:

count = 0
for stuff in iterator:
    count += 1
print count
Run Code Online (Sandbox Code Playgroud)

但是,我想将迭代器分成两半,所以我需要知道迭代的总量.有没有办法知道没有循环遍历迭代器的迭代量?

Pao*_*tti 10

没有办法知道迭代器将产生多少值而不消耗它直到结束.请注意,迭代器也可以是无限的,因此在这种情况下甚至不会定义总计数.

如果你可以确保迭代器是有限的,那么你要做的就是将它转换为list(using list(iterator)),然后使用通常的列表函数(len,切片)将它分成两半.当然,通过这种方式,所有项目将同时存储在内存中,这在您的情况下可能是可接受的,也可能是不可接受的.

或者,您可以尝试使用自定义迭代器类来跟踪将要生成的项目总数.这是否可行取决于如何获得所述迭代​​器.


sou*_*eck 5

由于迭代器协议只定义了两种方法:

iterator.__iter__()

iterator.next()
Run Code Online (Sandbox Code Playgroud)

答案是否定的,一般情况下,如果不迭代它们,就无法知道有限迭代器中的项目数.