标准库中的生成器函数——用于过滤的生成器函数

用于过滤的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素。

 第一组是用于过滤的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素本身。本章前面的14.8.1节用过itertools.takewhile函数。与takewhile函数一样,表14-1中的大多数函数都接受一个断言参数(predicate)。这个参数是个布尔函数,有一个参数,会应用到输入中的每个元素上,用于判断元素是否包含在输出中。

 

 

 
模块 函数 说明 个人理解备注
(内置) filter(predicate, it)

把it中的各个元素传给predicate,如果predicate(item)返回真值,那么产出对应的元素;

如果predicate是None,那么只产出真值元素。

 
itertools filterfalse(predicate, it) 与filter函数的作用类似,不过predicate的逻辑是相反的;predicate返回假值时产出对应的元素。  
       
 itertools  dropwhile(predicate, it)    
 itertools      
       
       
       
       
       

 

 

 1 import itertools
 2 
 3 def vowel(c):
 4     return c.lower() in 'aeiou'
 5 
 6 
 7 #返回所有真值对应的元素
 8 e1 = list(filter(vowel, 'Aardvark'))
 9 print("返回所有真值位置对应的元素:",e1)  #  ['A', 'a', 'a']
10 
11 #返回所有False对应的元素
12 e2 = list(itertools.filterfalse(vowel,  'Aardvark'))
13 print("返回所有假值位置对应的元素:",e2)  # ['r', 'd', 'v', 'r', 'k']
14 
15 
16 #一遇到第一个False,就把这个位置及后面所有位置的元素返回
17 e3 = list(itertools.dropwhile(vowel, 'Aardvark'))
18 print(e3) #['r', 'd', 'v', 'a', 'r', 'k']
19 
20 #与e3做对比
21 e31 = list(itertools.dropwhile(vowel, 'hAardvark'))
22 print(e31)   # ['h', 'A', 'a', 'r', 'd', 'v', 'a', 'r', 'k']
23 
24 
25 
26 #一遇到第一个False,就把False之前的真值对应位置的元素返回
27 e4 = list(itertools.takewhile(vowel, 'Aardvark'))
28 print(e4)  #['A', 'a']
29 
30 #与e4做对比
31 e41 = list(itertools.takewhile(vowel, 'hAardvark'))
32 print(e41)  # 返回空列表 ,[]
33 
34 
35 
36 #islice 切片,索引从0开始,取不到末尾位置的元素
37 e5 = list(itertools.compress('Aardvark', (1,False,1,1,0,1)))
38 print('e5:', e5)  #['A', 'r', 'd', 'a', 'k']
39 
40 e6 = list(itertools.islice('Aardvark', 4))
41 print('e6:', e6)  # ['A', 'a', 'r', 'd']
42 
43 e7 = list(itertools.islice('Aardvark', 4,7))
44 print('e7:', e7) #['v', 'a', 'r']
45 
46 e8 = list(itertools.islice('Aardvark', 1,7,2))
47 print('e8:', e8)  # ['a', 'd', 'a']

 

posted @ 2023-05-20 12:56  limalove  阅读(22)  评论(0)    收藏  举报