描述
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法
filter(function, iterable)
参数介绍
- function -- 判断函数。
- iterable -- 可迭代对象。
实例
- 过滤出列表中的奇数
newlist = filter(lambda a: a % 2 == 1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))
- 从多个区间列表中筛选符合条件的数据(传入多个参数)
def filter_data_from_range_list(range_list, data):
"""
从多个区间列表中筛选符合条件的数据
:param data:
:param range_list:
:return:
"""
if range_list:
for range in range_list:
if len(range) == 2:
left, right = range[0], range[1]
if left and right and left <= data and data < right:
return True
if left and not right and left <= data:
return True
if right and not left and data < right:
return True
return False
else:
return True
range_l = [(None, 5), (20, 50)]
datas = [1, 2, 3, 20, 30, 50, 100, 150]
# 方法1
res_01 = filter(lambda seq: filter_data_from_range_list(range_l, seq), datas)
print(list(res_01))
# 方法2
res_02 = filter(partial(filter_data_from_range_list, range_l), datas)
print(list(res_02))
注:partial() 固定某些参数并返回一个新的callable对象。这个新的callable接受未赋值的参数, 然后跟之前已经赋值过的参数合并起来,最后将所有参数传递给原始函数