Python:如何提前知道迭代器对象中的迭代次数?
到目前为止,如果我想知道一个迭代器里有多少次迭代(在我的例子中,就是文件里有多少个蛋白质序列),我会这样做:
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
,切片)来把它分成两半。当然,这样做的话,所有的项目会同时占用内存,这在某些情况下可能是可以接受的,也可能不行。
另外,你也可以尝试使用一个自定义的迭代器类,这个类可以记录将要产生的总项目数。是否可行取决于你是如何获取这些迭代器的。