Ell*_*est 5 python iterator time-complexity
我正在寻找一种从 Python 集合中检索(任何)元素的有效方法,并遇到了这种方法:
anyElement = next(iter(SET))
Run Code Online (Sandbox Code Playgroud)
当你从一个容器(比如一个集合)中生成一个迭代器时到底发生了什么?它是否只是创建一个指向内存中对象位置的指针,并在调用 next 时移动该指针?或者它是否将集合转换为列表然后从中创建一个迭代器?
我主要担心的是,如果是后者,似乎 iter() 将是 O(n) 操作。那时最好从集合中弹出一个项目,将弹出的项目存储在一个变量中,然后将弹出的项目重新插入到集合中。
感谢您提前提供任何信息!
集合是可迭代的,但没有.__next__()
方法,因此iter()
调用.__iter__()
集合实例的方法,返回一个具有该方法的可迭代对象。__next__
由于这是 O(1) 调用的包装器,因此一旦声明,它将在 O(1) 时间内运行
https://wiki.python.org/moin/TimeComplexity
另请参阅在 O(1) 时间内从 python3 dict 中检索任意密钥以获得关于.__next__()
!的扩展答案。