Python iter() 时间复杂度?

Ell*_*est 5 python iterator time-complexity

我正在寻找一种从 Python 集合中检索(任何)元素的有效方法,并遇到了这种方法:

anyElement = next(iter(SET))
Run Code Online (Sandbox Code Playgroud)

当你从一个容器(比如一个集合)中生成一个迭代器时到底发生了什么?它是否只是创建一个指向内存中对象位置的指针,并在调用 next 时移动该指针?或者它是否将集合转换为列表然后从中创建一个迭代器?

我主要担心的是,如果是后者,似乎 iter() 将是 O(n) 操作。那时最好从集合中弹出一个项目,将弹出的项目存储在一个变量中,然后将弹出的项目重新插入到集合中。

感谢您提前提供任何信息!

ti7*_*ti7 3

集合可迭代的,但没有.__next__()方法,因此iter()调用.__iter__()集合实例的方法,返回一个具有该方法的可迭代对象__next__

由于这是 O(1) 调用的包装器,因此一旦声明,它将在 O(1) 时间内运行

https://wiki.python.org/moin/TimeComplexity


另请参阅在 O(1) 时间内从 python3 dict 中检索任意密钥以获得关于.__next__()!的扩展答案。