迭代器迭代的时候跳过第一部分

Posted jeffrey-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器迭代的时候跳过第一部分相关的知识,希望对你有一定的参考价值。

有的时候,我们想基于迭代器的某个特定元素开始进行迭代。也就是说,在这个元素之前的元素都跳过。
itertools提供了一个dropwhile方法:
itertools.dropwhile(predicate, iterable)
Make an iterator that drops elements from the iterable as long as the predicate is true; afterwards, returns every element. Note, the iterator does not produce any output until the predicate first becomes false, so it may have a lengthy start-up time.
翻译即为:iterable中的每个元素从index 0开始,依次通过predicate函数进行检查,当predicate的结果为true时,跳过,直到第一次遇到为false的情况。从第一个为false的元素开始,后面的元素全部返回。
示例如下:

with open('/etc/passwd') as f:
    for line in f:
        print(line, end='')

##
# User Database
#
# Note that this file is consulted directly only when the system is running 
# in single-user mode. At other times, this information is provided by
# Open Directory.
...
##
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false 
root:*:0:0:System Administrator:/var/root:/bin/sh

假如现在要过滤掉所有的注释内容,则可以编写如下代码:

from itertools import dropwhile
with open('/etc/passwd') as f:
    for line in dropwhile(lambda line: line.startswith('#'), f):
        print(line, end='')

nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false 
root:*:0:0:System Administrator:/var/root:/bin/sh

以上是关于迭代器迭代的时候跳过第一部分的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE复习_8 集合框架复习

std::search 提取当前迭代器并使用 std::advance 向前移动迭代器

如何跳过已经迭代的行但读取未迭代的下一行?

迭代器

代码详解生成器迭代器

我正在尝试使用 c++ STL 制作 prims 算法。在迭代器第一次迭代后,它会停止代码并给出错误的输出