【问题标题】:How to get the current value of a Python iterator - dereferencing an iterator without incrementing如何获取 Python 迭代器的当前值 - 在不递增的情况下取消引用迭代器
【发布时间】:2021-05-04 07:27:49
【问题描述】:

在 C++ 中,我可以访问迭代器 it 所指向的值,以及周围的值(这并不总是安全的,但这里不是主题),使用取消引用:std::cout << "prev: " << *(it-1) << ", here: " << *it << ", next: " << *(it+1) << std::endl;

我如何在 Python 中做同样的事情?

使用next() 可以获得当前值,但这也会增加迭代器(类似于C++ *it++)。

下面的完整代码示例:

#include <iostream>
#include <vector>
int main() 
{
    std::vector<int> myvector{ 1, 2, 3, 4, 5 };
    for (auto it = myvector.begin()+1; it != myvector.end()-1; ++it) {
        std::cout << "prev: " << *(it-1) << ", here: " << *it << ", next: " << *(it+1) << std::endl;
    }
    return 0;
}

【问题讨论】:

  • 如果你有一个简单的向量或数组。但是 Python 迭代器可以应用任何逻辑来获取下一个元素。它甚至可能取决于运行时环境,而不是您检查的时间和实际使用它的时间。

标签: python iterator next dereference


【解决方案1】:

您不能这样做,但有一些使用itertools 的解决方法,例如

>>> from itertools import tee
>>> it = iter([1,2,3])
>>> it, it2 = tee(it)
>>> next(it2)
1
>>> list(it)
[1, 2, 3]

或者重建迭代器:

>>> from itertools import chain
>>> it = iter([1,2,3])
>>> first = next(it)
>>> first
1
>>> list(chain([first], it))
[1, 2, 3]

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2012-07-03
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多