标准库中的生成器函数——用于过滤的生成器函数
用于过滤的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素。
第一组是用于过滤的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素本身。本章前面的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']