itertools.dropwhile

itertools.dropwhile 使你能够在条件首次变为 False 后从序列中获取项目。

def is_even(x):
    return x % 2 == 0

lst = [0, 2, 4, 12, 18, 13, 14, 22, 23, 44]
result = list(itertools.dropwhile(is_even, lst))

print(result)
  

这输出了 [13, 14, 22, 23, 44]

此示例与 takewhile 的示例相同,但使用 dropwhile

注意,违反谓词的第一个数字(即:返回布尔值的函数)is_even13。之前的所有元素都将被丢弃。

产生的输出dropwhile 类似于从下面的代码所产生的输出。

def dropwhile(predicate, iterable):
    iterable = iter(iterable)
    for x in iterable:
        if not predicate(x):
            yield x
            break
    for x in iterable:
        yield x

takewhiledropwhile 产生的结果的串联产生了原始的可迭代。

result = list(itertools.takewhile(is_even, lst)) + list(itertools.dropwhile(is_even, lst))