如何在 Python 中跳过 Generator/Iterator 的第一个元素

使用 UliEngineering 中的 skip_first() 实用函数:

首先,使用以下命令安装 UliEngineering

install_uliengineering_user.sh
pip install --user UliEngineering

注意 UliEngineering 需要 Python 3.3+。

现在你可以像这样使用 skip_first()

skip_first_usage.py
from UliEngineering.Utils.Iterable import skip_first

for v in skip_first(v for v in [1,2,3,4,5]):
    print(v) # 打印 2,3,4,5

skip_first() 适用于任何 IterableIterator

不想安装 UliEngineering?

skip_first() 实用函数复制到你自己的代码中:

skip_first_impl.py
import collections

def skip_first(it):
    """
    跳过 Iterator 或 Iterable 的第一个元素,
    如 Generator 或 list。
    这将始终返回 generator 或在参数类型不兼容时引发 TypeError()
    """
    if isinstance(it, collections.Iterator):
        try:
            next(it)
            yield from it
        except StopIteration:
            return
    elif isinstance(it, collections.Iterable):
        yield from skip_first(it.__iter__())
    else:
        raise TypeError(f"你必须向 skip_first() 传递 Iterator 或 Iterable,但你传递了 {it}")

Check out similar posts by category: Python