我知道,在没有实际迭代的情况下,你无法确定Python迭代器的长度。
__length_hint__
方法即it.__length_hint__()
会返回len(list(it))
的估计值。甚至在操作员模块中有一个包装此方法的函数,该方法表示该方法“可能高估或低估任意数量。”
对于有限迭代器,什么情况下__length_hint__
将不准确?如果不能确定,为什么?
我在PEP 424中没有看到相关引用。
>>> obja = iter(range(98345984))
>>> obja.__length_hint__()
98345984
>>> import numpy as np
>>> objb = iter(np.arange(817483))
>>> objb.__length_hint__()
817483
我知道依赖于实现细节并不是个好主意。但这个细节已经在操作符模块的顶层函数中显式使用了。例如,是否有特定的数据结构不会产生可能的不准确性?