第三章 演算法 itertools 迭代器函式 過濾

2021-09-11 02:19:44 字數 2646 閱讀 7524

3.2.4 過濾

dropwhile()函式返回乙個迭代器,它會在條件第一次變為false之後生成輸入迭代器的元素。

from itertools import

*def

should_drop

(x):

print

('testing:'

,x)return x <

1for i in dropwhile(should_drop,[-

1,0,

1,2,

-2])

:print

('yielding:'

,i)

dropwhile()並不會過濾輸入的每乙個元素,第一條件為false之後,,輸入迭代器的所有其餘元素都會返回。

執行結果:

testing: -1

testing: 0

testing: 1

yielding: 1

yielding: 2

yielding: -2

takewhile()與dropwhile()正相反。它也返回乙個迭代器,這個迭代器將返回輸入迭代器中保證測試條件為true的元素。

from itertools import

*def

should_take

(x):

print

('testing:'

,x)return x <

2for i in takewhile(should_take,[-

1,0,

1,2,

-2])

:print

('yielding:'

,i)

一旦should_take()返回false,takewhile()就停止處理輸入。

執行結果:

testing: -1

yielding: -1

testing: 0

yielding: 0

testing: 1

yielding: 1

testing: 2

內建函式filter()返回乙個迭代器,它只包含測試條件返回true時所對應的元素。

from itertools import

*def

check_item

(x):

print

('testing:'

,x)return x <

1for i in

filter

(check_item,[-

1,0,

1,2,

-2])

:print

('yielding:'

,i)

filter()與dropwhile()和takewhile()不同,它在返回之前會測試每乙個元素。

執行結果:

testing: -1

yielding: -1

testing: 0

yielding: 0

testing: 1

testing: 2

testing: -2

yielding: -2

filte***lse()返回乙個迭代器,其中值包含測試條件返回false時對應的元素。

from itertools import

*def

check_item

(x):

print

('testing:'

,x)return x <

1for i in filte***lse(check_item,[-

1,0,

1,2,

-2])

:print

('yielding:'

,i)

testing: -1

testing: 0

testing: 1

yielding: 1

testing: 2

yielding: 2

testing: -2

compress()提供了另一種過濾可迭代物件內容的方法。不是呼叫乙個函式,而是使用另乙個可迭代物件中的值指示什麼時候接受乙個值以及什麼時候忽略乙個值。

from itertools import

*every_third = cycle(

[false

,false

,true])

data =

range(1

,10)for i in compress(data,every_third)

:print

(i,end=

' ')

print

()

第乙個引數是要處理的資料第迭代器。第二個引數是乙個選擇器迭代器,這個迭代器會生成布林值指示從資料輸入中取哪些元素(true值說明將生成這個值;false值表示這個值將被忽略。)

執行結果:

3 6 9

演算法第三章

單調遞增最長子序列分析 1.1 i 0時 dp 0 1 其餘情況 dp i max dp i dp j 1 0 j i 1.2填表的維度 一維 填表的範圍 dp 0 到 dp n 1 填表順序 從左向右 1.3因為要以每乙個數字終點,然後從頭遍歷到他本身,所以時間複雜度位o n 2 空間複雜度 建立...

《演算法》 第三章 查詢

在第三章裡面,並不是一開始就講的查詢,第一節中首先介紹的是符號表。符號表,其實就是儲存了鍵值對的一種資料結構,鍵值對用於將乙個鍵和乙個值聯絡起來。符號表支援兩種操作 插入 put 即將一組新的鍵值對存入表中 查詢 get 即根據給定的鍵得到對應的值。下面看一下書中關於符號表的應用以及api 書中對於...

第三章 演算法概述

3.5.1 模板語法 模板函式的模型和實現從乙個模板參數列開始。其語法包括關鍵字template,後面緊跟用角擴號括起來的形式型別的非空表在這個參數列中,每種型別前面都有關鍵字typename 不同的型別之間用逗號隔開。乙個模板型別的參數列 template 多個模板型別的參數列 template ...