排除最后一个元素的迭代器

西蒙扎克

在不知道最后一个元素的长度的情况下,实现不包含最后一个元素的迭代器的pythonic方法是什么?

一个例子:

>>> list(one_behind(iter(range(10)))
... [0, 1, 2, 3, 4, 5, 6, 7, 8]

>>> iter_ = one_behind(iter((3, 2, 1)))
>>> next(iter_)
... 3
>>> next(iter_)
... 2
>>> next(iter_)
... StopIteration

一种简单的方法是使用循环并存储先前的值,但是我想简短一些。

使用循环的参考实现:

def one_behind(iter_):
    prev = None
    for i, x in enumerate(iter_):
        if i > 0:
            yield prev
        prev = x
虚假的

使用itertools.tee

import itertools

def behind(it):
    # it = iter(it)  # to handle non-iterator iterable.
    i1, i2 = itertools.tee(it)
    next(i1)
    return (next(i2) for x in i1)

用法:

>>> list(behind(iter(range(3))))
[0, 1]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

向量的最后一个元素的迭代器

如何获得从最后一个元素开始的迭代器

迭代器:将最后一个元素与另一个值配对

使用迭代器中除最后一个元素之外的所有元素

从迭代器中排除第一个元素(Python)

检测迭代器是否为std :: map的最后一个元素

迭代器到列表中最后一个元素之后

C ++ Vector.erase()最后一个元素破坏了迭代器

如何检测地图迭代器中的最后一个元素

Kotlin列表迭代器跳到最后一个元素

如何检查for循环是否在迭代器的最后一个元素上?

无法排除 xpath 中的最后一个元素

您可以pop_back一个向量并仍然使用迭代器到最后一个元素吗?

为什么arrayList不迭代最后一个元素?

如何只迭代列表的最后一个元素?

我如何处理迭代的最后一个元素

For循环仅迭代Python中的最后一个元素

For 循环只迭代列表中的最后一个元素

zip迭代器缺少最后一个元素如何将线连接在一起

排除数组的第一个和最后一个元素

C++:切片时的迭代器约定,尤其是访问最后一个元素并最终将其删除

从第二个元素到最后一个元素迭代列表

std :: vector在最后一个之后使用第一个迭代器擦除

迭代Python列表中的连续元素,以使最后一个元素与第一个元素结合

在比较当前元素和下一个元素时,如何迭代数组的最后一个元素?

WordPress的排除最后一个帖子

列出元素的下一个迭代器

单击多个选择器的最后一个元素

jQuery选择器查找最后一个元素