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

发布时间 2023-05-20 13:01:32作者: limalove

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

 

import itertools


def vowel(c):
    return c.lower() in 'aeiou'


#返回所有真值对应的元素
e1 = list(filter(vowel, 'Aardvark'))
print("返回所有真值位置对应的元素:",e1)  #  ['A', 'a', 'a']

#返回所有False对应的元素
e2 = list(itertools.filterfalse(vowel,  'Aardvark'))
print("返回所有假值位置对应的元素:",e2)  # ['r', 'd', 'v', 'r', 'k']


#一遇到第一个False,就把这个位置及后面所有位置的元素返回
e3 = list(itertools.dropwhile(vowel, 'Aardvark'))
print(e3) #['r', 'd', 'v', 'a', 'r', 'k']

#与e3做对比
e31 = list(itertools.dropwhile(vowel, 'hAardvark'))
print(e31)   # ['h', 'A', 'a', 'r', 'd', 'v', 'a', 'r', 'k']



#一遇到第一个False,就把False之前的真值对应位置的元素返回
e4 = list(itertools.takewhile(vowel, 'Aardvark'))
print(e4)  #['A', 'a']


#与e4做对比
e41 = list(itertools.takewhile(vowel, 'hAardvark'))
print(e41)  # 返回空列表 ,[]



#islice 切片,索引从0开始,取不到末尾位置的元素
e5 = list(itertools.compress('Aardvark', (1,False,1,1,0,1)))
print('e5:', e5)  #['A', 'r', 'd', 'a', 'k']



e6 = list(itertools.islice('Aardvark', 4))
print('e6:', e6)  # ['A', 'a', 'r', 'd']

e7 = list(itertools.islice('Aardvark', 4,7))
print('e7:', e7) #['v', 'a', 'r']


e8 = list(itertools.islice('Aardvark', 1,7,2))
print('e8:', e8)  # ['a', 'd', 'a']