filter,顾名思义,就是一个过滤器。其作用是从列表(或其他序列类型)中筛选出满足条件的子列表,filter是python的内置函数,无须import即可直接使用。
使用filter 函数筛选list列表数据,代码比单纯使用 if for循环判断要更加整洁
fliter 支持 函数和lambda 表达式两种写法
#方法一 lambda 表达式
a = [1,2,3,4,5,6,7,8]
b=filter(lambda x:x>5,a)
#方法二 函数
a = [1,2,3,4,5,6,7,8]
def choice(in_param):
return in_param>5
b=flist(ilter(choice,a))
耗时,理论上filter 比 for 循环要快,当然具体耗时和电脑配置,还有代码的书写有一定关系,具体耗时要看当时的电脑运行情况,包括内存运行情况,电脑配置,代码书写等因素,以下示例仅做参考
map函数的原型是map(function, iterable, …),它的返回结果是一个列表。map()是Python内置的高阶函数,它接收一个函数function 和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。
同样map 支持 函数和lambda 表达式两种写法
#方法一 lambda 表达式
a = [1,2,3,4,5,6,7]
result=list(map(lambda x: x*2,a))
#方法二 函数
def map_list_result(a):
return a+3
result=list(map(lambda x: map_list_result(x),a))
reduce 函数用法
reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中
reduce 函数不仅支持list集合的运算,还支持tuple集合的运算,甚至支持dict的运算(只是key值得运算)
a = [1,2,3,4,5,6,7]
b=(1,2,3,4,5)
c={'a':[1,2,3],'b':[4,5,6]}
方法一 lambda 表达式
a_1 = reduce(lambda x,y:x+y,a)
#方法二 函数
def reduce_result(x,y):
return x+y
a_2= reduce(lambda x,y:reduce_result(x,y),a)
# 不仅支持 list,还支持tuple
a_3= reduce(lambda x,y:x+y,b)
list交集、并集、补集的实现
Python list 交、并、补集的实现方式有两种,一种是通过python 的运算符实现,另一种是通过python set 集合的置函数来实现
使用 set集合运算符实现
a = [‘a’,‘b’,‘c’,'d,‘e’,‘f’]
b = [‘e’,‘f’,‘g’,‘h’,‘i’,‘u’]
list(set(a) & set(b)) # 使用 “&” 运算求a与b的交集,输出:[e,f]
list(set(a) | set(b)) # 使用 “|” 运算求a与b的并集,输出:[a,b,c,d,e,f,g,h,i,u]
list(set(b) - set(a)) # 使用 “-” 运算求a与b的差(补)集: 求b中有而a中没有的元素,输出:[g, h, i, u]
list(set(a) - set(b)) # 使用 “-” 运算求a与b的差(补)集: 求a中有而b中没有的元素,输出: [a, b, c,d]
list(set(a) ^ set(b)) # 使用 “^” 运算求a与b的对称差集,输出:[a,b,c,d,g,h,i,u]
使用set集合内置函数实现
a = [‘a’,‘b’,‘c’,'d,‘e’,‘f’]
b = [‘e’,‘f’,‘g’,‘h’,‘i’,‘u’]
print(list(set(a).intersection(set(b)))) # 使用 intersection 求a与b的交集,输出:[e,f]
print(list(set(a).union(b)) ) # 使用 union 求a与b的并集,输出:[a,b,c,d,e,f,g,h,i,u]
print(list(set(b).difference(set(a)))) # 使用 difference 求a与b的差(补)集:求b中有而a中没有的元素,输出:[g, h, i, u]
print(list(set(a).difference(set(b))) ) # 使用 difference 求a与b的差(补)集:求a中有而b中没有的元素,输出:[g, h, i, u]
print(list(set(a).symmetric_difference(b))) # 使用 symmetric_difference 求a与b的对称差集,输出:[a,b,c,d,g,h,i,u]



