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_even13。一旦 takewhile 遇到一個為給定謂詞產生 False 的值,就會爆發。

產生的輸出takewhile 類似於從下面的程式碼所產生的輸出。

def takewhile(predicate, iterable):
    for x in iterable:
        if predicate(x):
            yield x
        else:
            break

注意: takewhiledropwhile 產生的結果的串聯產生了原始的可迭代。

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