itertools.takewhile
itertools.takewhile 使你可以从序列中获取项目,直到条件首次变为 False
。
def is_even(x):
return x % 2 == 0
lst = [0, 2, 4, 12, 18, 13, 14, 22, 23, 44]
result = list(itertools.takewhile(is_even, lst))
print(result)
这输出了 [0, 2, 4, 12, 18]
。
注意,违反谓词的第一个数字(即:返回布尔值的函数)is_even
是 13
。一旦 takewhile
遇到一个为给定谓词产生 False
的值,就会爆发。
在产生的输出由 takewhile
类似于从下面的代码所产生的输出。
def takewhile(predicate, iterable):
for x in iterable:
if predicate(x):
yield x
else:
break
注意: takewhile
和 dropwhile
产生的结果的串联产生了原始的可迭代。
result = list(itertools.takewhile(is_even, lst)) + list(itertools.dropwhile(is_even, lst))