通过enumerate来获取元素的编号,再通过编号获得过滤器中的布尔值,然后根据布尔值作为判断条件,在列表生成式中把同一类的元素取出来。代码如下:
lst = ['beep','boop','foo','bar']
filters = [True,False,False,True]
def bifurcate(lst,filters):
return [
[ x for i,x in enumerate(lst) if filters[i]==True],
[ x for i,x in enumerate(lst) if filters[i]==False]
]
print(bifurcate(lst,filters))
输出结果如下:
[['beep', 'bar'], ['boop', 'foo']]
[Finished in 0.6s]
我们也可以使用函数的方法来实现筛选功能,只要注意我们判断的核心是有一个用于if语句的布尔表达式。
def bifurcate(lst,fn):
return[
[ x for x in lst if fn(x)],
[ x for x in lst if not fn(x)]
]
lst = ['up','Python','umbrella','allan']
results = bifurcate(lst, lambda x: x[0] == 'u')
print(results)
输出如下:
[['up', 'umbrella'], ['Python', 'allan']]
[Finished in 0.6s]