Python:如何提前知道迭代器对象中的迭代次数?

4 投票
5 回答
581 浏览
提问于 2025-04-17 09:04

到目前为止,如果我想知道一个迭代器里有多少次迭代(在我的例子中,就是文件里有多少个蛋白质序列),我会这样做:

count = 0
for stuff in iterator:
    count += 1
print count

不过,我想把这个迭代器分成两半,所以我需要知道总共有多少次迭代。有没有办法在不遍历这个迭代器的情况下,知道会有多少次迭代呢?

5 个回答

1

你可以用 list() 把你的迭代器转换成一个列表,然后用 len() 来获取这个列表的大小,比如:

len(list(iterator))
5

因为迭代器协议只定义了两个方法:

iterator.__iter__()

iterator.next()

所以一般来说,你无法在不逐个查看的情况下,知道一个有限迭代器中有多少个项目。

10

我们无法知道一个迭代器会产生多少个值,除非把它用完。要注意的是,迭代器有可能是无限的,这样的话总数就根本无法定义。

如果你能确保这个迭代器是有限的,有一种方法可以实现你想要的,就是把它转换成一个列表(用 list(iterator)),然后就可以用常见的列表函数(比如 len,切片)来把它分成两半。当然,这样做的话,所有的项目会同时占用内存,这在某些情况下可能是可以接受的,也可能不行。

另外,你也可以尝试使用一个自定义的迭代器类,这个类可以记录将要产生的总项目数。是否可行取决于你是如何获取这些迭代器的。

撰写回答